选择 ListView 项目时触发计时器
Posted
技术标签:
【中文标题】选择 ListView 项目时触发计时器【英文标题】:Triggering timer when ListView item is selected 【发布时间】:2020-08-05 05:55:59 【问题描述】:我正在尝试触发列表视图中的元素时触发计时器。我通过使用代码定义“运行”计时器来做到这一点(用户定义在哪里):
running: <containingItem>.ListView.isCurrentItem ? true : false
如果我不这样做,列表中的每个元素都会触发其开启计时器,因此计时器应该只针对选定的列表视图元素关闭。当我在列表视图的组件中执行此操作时,它可以工作 - 只有与所选项目关联的计时器触发,其余的则不触发。当我尝试在 ListView (以及所有包含对象)之外执行此操作时,它不起作用。我似乎无法以任何方式调用“ListView.isCurrentItem”命令。我在这里错过了什么?
我的代码是这样设置的:
Column
id: lv1
ListView
id: lv2
model: myModel
Component
id: lv3
Item
id: lv4
Rect
Timer
id: timer1
running: (lv4.ListView.isCurrentItem) ? true : false //this works correctly
Rect
Timer
id: timer2
running: (lv1.lv3.lv4.ListView.isCurrentItem ? true : false //this doesn't work correctly
当我运行此代码时,我收到一个错误:无法读取未定义的属性 'lv4'
【问题讨论】:
你能发布你的实际代码吗?error: Cannot read property 'lv4' of undefined
在这里没有真正意义,并且 ListView 的 delegate
没有设置。我知道你的错误是什么,但没有代码就无法真正解释清楚
我假设 lv4 打算成为您的 ListView 的代表?
【参考方案1】:
ListView.isCurrentItem
是附加属性,只能从它附加到的内部对象中引用。这就是为什么你不能从timer2
调用它的原因。
您可以在此处阅读更多信息:https://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#attached-properties-and-attached-signal-handlers
【讨论】:
【参考方案2】:您不能将组件 (lv3) 的 id 用作委托的实例。它只是一个对象的定义,而不是它的一个实例。
我不太清楚您的目标是什么,但如果您只需要在选择列表中的项目时停止计时器,那么您应该可以这样做:
ListView
onCurrentIndexChanged: timer2.stop()
【讨论】:
以上是关于选择 ListView 项目时触发计时器的主要内容,如果未能解决你的问题,请参考以下文章
在 VB .NET 2008 Winform Listview 中禁用复选框选择
在 Swift 中更改计时器选择器函数中的 userInfo