Элементы исчезают из поля со списком, когда я читаю их из модели

Я имею 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:

takeColumn:

Удаляет указанный столбец, не удаляя элементы столбца, и возвращает список указателей на удаленные элементы.

Возможно, вы захотите повторить ваши пункты благодаря этому фрагменту (не проверено):

rootItem = self.ui.comboBox.model().invisibleRootItem()
for rowNum in xrange(rootItem.rowCount()):
    item = rootItem.child(rowNum, 0)
    ...
Другие вопросы по тегам