Добавить и снять флажки для QTreeWidgetItems - PullRequest
1 голос
/ 26 февраля 2020

Мое приложение написано с PyQt5. У меня есть QTreeWidget с некоторыми элементами:

Parent
--Child 1
--Child 2

Я хочу динамически добавлять и удалять флажки для дочерних элементов. Мне удалось добавить флажки с

item.setFlags(item.flags() | 16)

и

item.setCheckState(0, QtCore.Qt.Checked)

Но у меня есть 2 проблемы:

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

, и я не хочу этого.

Минимальный пример:

from PyQt5.QtWidgets import *

from PyQt5 import QtCore
app = QApplication([])
label = QTreeWidget()
label.show()
parent = QTreeWidgetItem(label)
parent.setText(0, "Parent")

child1 = QTreeWidgetItem(parent)
child1.setText(0, "child1")

child2 = QTreeWidgetItem(parent)
child2.setText(0, "child2")

child1.setFlags(child1.flags() | QtCore.Qt.ItemIsUserCheckable)
child1.setCheckState(0, QtCore.Qt.Checked)

child1.setFlags(child1.flags() & ~QtCore.Qt.ItemIsUserCheckable)


app.exec_()

Смена флага ItemIsUserCheckable обратно не снимает флажок.

1 Ответ

1 голос
/ 26 февраля 2020

Не ставьте

item.setFlags(item.flags() | 16)

, так как он не читается, лучше использовать

item.setFlags(item.flags() | Qt.ItemIsUserCheckable)

Переходя к проблеме, если вы хотите снять флажок, то у вас есть чтобы удалить этот флаг:

item.setFlags(item.flags() & ~Qt.ItemIsUserCheckable)
item.setData(0, QtCore.Qt.CheckStateRole, None)

Представитель, выполняющий рисование, не принимает во внимание флаг, связанный с QModelIndex, так как @ musicamante указывает, что состояние также должно быть очищается установкой None.

...