2010-04-05 2 views
1

Я пытаюсь создать список элементов флажка, которые изменяют статус при активации. Я могу подключить сигнал активации, и все работает, но меняется на экране. Я здесь пропустил несколько шагов?Настройка checkstate в ListWidgetItem

Вот создание списка:

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) 

Я проверил, что обработчик вызывается после нажатия - если я поставлю печать там, она будет чередоваться «проверено»/"unchecked". Что я могу сделать, чтобы обновить сами флажки?

Редактировать: попробовал вызывать update() и испускать itemChanged сигналы ... пока не повезло.

ответ

2

Я не могу проверить это только сейчас, но ... У меня создалось впечатление, что PyQt4 автоматически обрабатывал обновления экрана, когда элементы были отмечены/сняты флажки (по крайней мере, для элементов QCheckBox). Это выглядит для меня, как ваш обработчик событий фактически уничтожает действие пользователя. Вы пробовали комментировать строку self.connect и снова запустить?

Как я понимаю, setCheckState() действительно предназначен для установки состояния по умолчанию для каждого элемента ...