1

我有一个带有 QListWidget 的表单,我在其中反复添加新项目。这一切都完美无瑕,除了事情:无论我通过什么标志,这些物品都是三态的。因此,必须单击该项目两次以选中/取消选中它们。我应该怎么做才能使它们成为正常的双态?

小部件是这样创建的:

def _locationDetails(self):
    self.locationDetails = QListWidget()
    self.locationDetails.setFixedHeight(50)
    return self.locationDetails

end 项目添加如下:

def addLocationDetail(self, text, checked = True):
    item = QListWidgetItem(text)
    item.setFlags(QtCore.Qt.ItemIsUserCheckable |
                  QtCore.Qt.ItemIsSelectable    |
                  QtCore.Qt.ItemIsEnabled)
    item.setCheckState(checked)
    self.locationDetails.addItem(item)

我调用添加新项目的代码如下:

    # resolve location:
    waypoint.getLocationDetails()
    self.locationDetails.clear()
    self.addLocationDetail("location=%s"    % waypoint.location)
    self.addLocationDetail("department=%s"  % waypoint.department)
    self.addLocationDetail("country=%s"     % waypoint.country)
4

1 回答 1

1

问题是因为setCheckState()函数需要来自Qt::CheckState枚举的值:

枚举 Qt::CheckState

这个枚举描述了可检查项、控件和小部件的状态。

常数 值 说明

Qt::Unchecked 0 该项目未选中。

Qt::PartiallyChecked 1 项目被部分选中。如果检查了部分但不是全部的子项,则可以部分检查分层模型中的项目。

Qt::Checked 2 检查项目。

并且由于您True默认为它传递一个值,因此它被转换为1对应于Qt::PartiallyChecked.

一种可能的解决方案是将布尔值用于类型的适当值Qt::CheckState

def addLocationDetail(self, text, checked=True):
    item = QListWidgetItem(text)
    item.setFlags(QtCore.Qt.ItemIsUserCheckable |
                  QtCore.Qt.ItemIsSelectable    |
                  QtCore.Qt.ItemIsEnabled)
    item.setCheckState(QtCore.Qt.Checked if checked else QtCore.Qt.Unchecked)
    self.locationDetails.addItem(item)
于 2018-01-23T14:04:27.427 回答