【问题标题】:highlight QML ListView Item on mouse click在鼠标单击时突出显示 QML ListView 项
【发布时间】:2021-04-02 19:28:30
【问题描述】:

我注意到列表视图会自动/默认突出显示第一项我如何禁用它并仅突出显示我在鼠标单击时选择的项目?

Component {
id: highlight
Rectangle {
    width: 180; height: 40
    color: "lightsteelblue"; radius: 5
    y: list.currentItem.y
    Behavior on y {
        SpringAnimation {
            spring: 3
            damping: 0.2
        }
    }
  }
}

ListView {
   id: list
   width: 180; height: 200
   model: ContactModel {}
   delegate: Text {
    text: name 
        
      MouseArea{
          anchors.fill: parent
          onClicked: {
          list.currentIndex = index
         }
      }
    }

   highlight: highlight
   highlightFollowsCurrentItem: false
   focus: true
}

我已经完成了鼠标部分,但我一直在禁用项目附加时的突出显示。

【问题讨论】:

    标签: qt listview qml qqmlcomponent


    【解决方案1】:

    好的,经过几个小时的搜索,我使用了onCountChanged 信号 指示添加到列表中的项目,然后将 ListView currentIndex 休息到 -1 所以代码将是这样的

    onCountChanged: {
       list.currentIndex = -1
    }
    

    【讨论】:

      【解决方案2】:

      默认情况下,currentIndex 设置为0,这就是为什么第一个项目总是开始突出显示的原因。您可以通过简单地将currentIndex 初始化为 -1 来关闭它。

      ListView {
          currentIndex: -1
          ...
      }
      

      【讨论】:

      • 感谢您的快速响应,不幸的是我已经尝试了您的解决方案,但它对我不起作用。它仍然突出显示第一个添加的项目。顺便说一句,我使用的是 Qt 5.9 版
      • 我用您提供的代码对其进行了测试,它确实有效。也许您的应用程序正在做一些您的示例代码没有做的事情?
      • 在我的应用程序中,我动态地将项目添加到列表中,但在示例中,因为它在初始化中使用它,所以它工作正常。那么在将项目添加到列表视图中时是否还有另一种方法可以禁用它? @JarMan
      • 请编辑您的问题,以提供更好的示例来说明问题。
      猜你喜欢
      • 2012-03-13
      • 1970-01-01
      • 2018-12-30
      • 2012-03-12
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      相关资源
      最近更新 更多