【问题标题】:Create a signal for each item in QListWidget为 QListWidget 中的每个项目创建一个信号
【发布时间】:2015-07-31 19:03:13
【问题描述】:

我想使用 QListWidget 创建一个项目列表并进行设置,以便每次单击(选择)一个项目时都会执行不同的方法。我考虑解决这个问题的方法是将列表连接到一个检查索引的方法,并根据项目索引生成一个连接到不同方法的信号。问题是,如果我没有按钮或任何东西,我不知道如何生成这个信号。该方法只是检查项目索引。

任何建议将不胜感激!

【问题讨论】:

  • 为什么需要信号?为什么不直接调用方法呢?
  • 当您选择、单击或双击一个项目时,您已经有了一堆信号:itemSelectionChangeditemActivateditemClicked... 查看Qt Doc
  • 你能详细说明一下吗? @ekhumoro

标签: pyqt qlistwidget


【解决方案1】:

简单的想法是将itemClicked 信号连接到一个插槽,在该插槽中根据单击的索引调用方法。在这种情况下,您不需要为每个项目提供信号。

但是,如果您真的想为每个项目创建一个“点击”信号并将其连接到其各自的插槽,您可以这样做:

  1. 子类化QListWidgetItem 并向其添加clicked 信号。 How to add custom signals

  2. 在填充 QListWidget 时,根据其索引将每个项目与其插槽连接起来。

  3. 将 QListWidget 的 itemClicked 信号连接到一个插槽,该插槽会发出单击项目的信号,如下所示:

    def itemClickedSlot(item):  
        item.clicked.emit()
    

【讨论】:

  • 谢谢。我会尝试这样做。 ekhumoro 说我可以直接调用该方法。你知道他指的是什么吗?
  • 据我了解他的评论,我会说这是我向您解释的第一个替代方案:不是为每个项目设置一个信号,而是直接根据点击的索引调用该方法。
  • 谢谢你,x 平方。我试图让您的答案起作用,但我不知道如何为每个列表项添加点击信号(它说 QListWidgetItem 不具有此属性)。经过多次尝试,我最终做的是使用 QListWidget 类的 currentRowChanged 信号并将其连接到基于索引调用特定函数的方法。这和你提到的非常相似。所以当然,你让我走上了正轨。再次感谢!
  • 我认为您在步骤 1 中犯了一个错误。您是否将 QListWidgetItem 子类化,然后在其中定义了一个信号 clicked,然后将子类的实例而不是基类添加到您的 QListWidget?请参阅here 了解如何将自定义信号添加到您的子类。
  • @theCHemist90。正如 x 平方所推测的那样,我的意思是您应该与列表小部件的 itemClicked 信号建立 one 连接,然后该信号将发送被点击的项目。然后您可以通过listwidget.row(item) 获取索引并调用相应的方法。
猜你喜欢
  • 2018-07-31
  • 2015-08-23
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
相关资源
最近更新 更多