【问题标题】:Items disappears from combo box when I read them from model当我从模型中读取项目时,项目从组合框中消失
【发布时间】:2014-01-16 10:07:08
【问题描述】:

我有QComboBox 并设置了QStandardItemModel,因为我需要其中的多选复选框。 问题是当我读取文本值并检查组合框中项目的状态时,它们会从组合中消失。

这就是我将模型设置为组合框的方式:

areas = ["Area one", "Area two", "Area three", "Area four"]
model = QtGui.QStandardItemModel(4, 1)# 4 rows, 1 col
for i,area in enumerate(areas):
    item = QtGui.QStandardItem(area)
    item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
    item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)
    model.setItem(i, 0, item)
self.ui.comboBox.setModel(model)

这就是我从组合框读取数据的方式:

modelColumn = self.ui.comboBox.model().takeColumn(0)
for item in modelColumn:
   print item.text(),"---", item.checkState()

这是我从组合框读取数据前后的屏幕截图:

...结果如预期的那样:

Area one --- 0
Area two --- 2
Area three --- 2
Area four --- 0

另外,当组合框处于非活动状态时,是否有简单的方法不显示“区域一”(我只想看到右角的箭头,如第二张图片)或设置要显示的其他文本,如“选择区域”?

【问题讨论】:

    标签: python pyqt4 qcombobox qstandarditemmodel qcheckbox


    【解决方案1】:

    当然组合框是空的。您实际上是从模型中删除了整个第 0 列:

    来自 Qt 文档:

    takeColumn

    删除给定列而不删除列项,并返回指向已删除项的指针列表。

    由于这个 sn-p(未测试),您可能想要迭代您的项目:

    rootItem = self.ui.comboBox.model().invisibleRootItem()
    for rowNum in xrange(rootItem.rowCount()):
        item = rootItem.child(rowNum, 0)
        ...
    

    【讨论】:

    • 行得通,谢谢。当组合框处于非活动状态时,它总是显示第一项(“区域一个”),因为我能够检查多个没有任何意义的项目。你能告诉我如何禁用该文本(只有箭头可见)或将文本更改为“选择区域”
    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多