Элементы исчезают из поля со списком, когда я читаю их из модели
Я имею QComboBox
и я поставил QStandardItemModel
потому что мне нужны множественные флажки. Проблема в том, что когда я читаю текстовое значение и проверяю состояние элементов в comboBox, они исчезают из комбинированного списка.
Вот как я устанавливаю модель для comboBox:
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)
Вот как я читаю данные из comboBox:
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
Кроме того, есть ли простой способ не показывать "Область первая", когда comboBox неактивен (я хочу видеть только стрелку в правом углу, как на втором изображении), или установить другой текст, который будет отображаться, например "выбрать область"?
1 ответ
Конечно, поле со списком становится пустым. Вы фактически удаляете весь столбец 0 из вашей модели:
из Qt doc:
Удаляет указанный столбец, не удаляя элементы столбца, и возвращает список указателей на удаленные элементы.
Возможно, вы захотите повторить ваши пункты благодаря этому фрагменту (не проверено):
rootItem = self.ui.comboBox.model().invisibleRootItem()
for rowNum in xrange(rootItem.rowCount()):
item = rootItem.child(rowNum, 0)
...