【问题标题】:Setting checkstate on a ListWidgetItem在 QListWidgetItem 上设置检查状态
【发布时间】:2011-02-04 12:50:15
【问题描述】:

我正在尝试创建一个复选框项目列表,以更改激活状态。我可以连接激活信号,一切似乎都正常,但屏幕上发生了变化。我在这里遗漏了一些步骤吗?

这里是列表创建:

self.listField = QtGui.QListWidget(self)

muted_categories = qb.settingsCollection['mutedCategories'].split('|')
main_categories = sorted(set(qb.categoryTopNames.values()))

for category in main_categories:
   item = QtGui.QListWidgetItem(category, self.listField)
   item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
   if category in muted_categories:
      item.setCheckState(QtCore.Qt.Checked)
   else:
      item.setCheckState(QtCore.Qt.Unchecked)

self.listField.connect(self.listField, QtCore.SIGNAL('itemActivated(QListWidgetItem*)'), self.doItemChangeState)

这是处理程序:

def doItemChangeState(self, item):
   """ invert the state of the activated item """

   if item.checkState() == QtCore.Qt.Checked:
      item.setCheckState(QtCore.Qt.Unchecked)
   else:
      item.setCheckState(QtCore.Qt.Checked)

我确认处理程序在单击后被触发 - 如果我将打印件放在那里,它将交替“选中”/“未选中”。我该怎么做才能刷新复选框本身?

编辑:尝试调用 update() 并发出 itemChanged 信号...到目前为止没有运气。

【问题讨论】:

    标签: qt4 pyqt4 maemo


    【解决方案1】:

    我现在无法对此进行测试,但是...我的印象是 PyQt4 在选中/取消选中项目时会自动处理屏幕更新(至少,它适用于 QCheckBox 项目)。在我看来,它看起来就像您的事件处理程序实际上正在撤消用户的操作。您是否尝试过注释掉 self.connect 行并再次运行?

    据我了解,setCheckState() 确实是为了设置每个项目的默认状态...

    【讨论】:

      猜你喜欢
      • 2020-10-09
      • 1970-01-01
      • 2016-06-21
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2021-02-23
      • 2019-11-24
      相关资源
      最近更新 更多