在QListWidgetItem上设置checkstate

时间:2010-04-05 18:38:24

标签: qt4 pyqt4 maemo

我正在尝试创建一个复选框项列表,用于更改激活状态。我可以连接激活信号,一切似乎都有效,但屏幕上有变化。我在这里错过了一些步骤吗?

这是列表创建:

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信号......到目前为止没有运气。

1 个答案:

答案 0 :(得分:2)

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

据我了解,setCheckState()实际上是用来设置每个项目的默认状态......