代码之家  ›  专栏  ›  技术社区  ›  viraptor

在ListWidgetItem上设置CheckState

  •  1
  • viraptor  · 技术社区  · 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信号…到目前为止还没有运气。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Rini    15 年前

    我现在不能测试这个,但是…我觉得Pyqt4在项目被选中/取消选中时会自动处理屏幕更新(至少对于Qcheckbox项目是这样)。它 对我来说,就像您的事件处理程序实际上正在撤消用户的操作一样。你试过评论self.connect线路然后再次运行吗?

    据我所知,setcheckstate()实际上是用于设置每个项的默认状态…