选择 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 中禁用复选框选择

如何处理 ListView 中的多个倒数计时器?

在 Swift 中更改计时器选择器函数中的 userInfo

使用tabview更改选项卡时如何使SwiftUI中的计时器保持触发

Android:ListView 中的多个同时倒计时计时器

java事件触发计时器后二十四小时后只执行一次业务逻辑