如何禁用QML ListView的委托悬停高亮效果
解决ListView委托悬停高亮问题
要彻底禁用ListView委托的悬停高亮效果,可尝试以下几种方案:
方法一:设置透明高亮组件
直接给ListView指定完全透明的highlight组件,覆盖默认高亮样式:
ListView { id: friendsListView anchors.top: parent width: parent.width height: friendsModel.count * ((stl.setsCmnTxtHght + stl.setsCmnBtnHght) * 2 + stl.setsCmnVertSpace * 3 + stl.setsCmnVertSpace); interactive: false spacing: stl.setsCmnVertSpace // 添加透明高亮组件 highlight: Rectangle { color: "transparent" opacity: 0 } model: ListModel { id: friendsModel } delegate: Widgets.FriendInfoWidget { id: friendsInfoDelegate mActive: model.isActive isCoach: model.isCoach mName: model.nickname mID: model.ID mIndex: (index + 1) } Component.onCompleted: refreshFriendsModel(); }
方法二:在委托内部禁用悬停逻辑
如果高亮是FriendInfoWidget自身实现的悬停效果,需要修改委托组件的代码:
打开Widgets.FriendInfoWidget的定义,找到处理悬停的相关代码(比如MouseArea的hoverEnabled属性或onHovered信号逻辑),将hoverEnabled设为false,或者移除悬停触发的样式变化:
// 在FriendInfoWidget内部示例 MouseArea { hoverEnabled: false // 禁用悬停检测 // 其他鼠标事件逻辑... }
方法三:彻底屏蔽ListView鼠标交互
若ListView无需任何鼠标交互,除了interactive: false,还可添加mouseAreaEnabled: false(部分Qt版本支持),彻底阻断鼠标事件:
ListView { id: friendsListView interactive: false mouseAreaEnabled: false // 禁用内部鼠标区域 // 其余原有属性... }
内容的提问来源于stack exchange,提问作者Caboom Bom
相关产品推荐
相关产品推荐

