Отключить столбец QTreeWidgetItem или удалить установленный CheckBox - PullRequest
2 голосов
/ 21 октября 2010

У меня QTreeWidgetItem установлено в QTreeWidget с 2 столбцами. Обе ячейки получили CheckBox, установленный setCheckState(...).

Когда пользователь снимает флажок CheckBox в моем первом столбце, я снимаю флажок второго CheckBox в столбце 2.

Теперь я хотел бы запретить пользователю снова проверять этот второй CheckBox. Можно ли снять этот флажок в столбце 2 или отключить только эту ячейку? До сих пор я только что видел, что все флаги работают с полным элементом, и набор CheckBox не исчезнет.

Btw. Элементы не доступны для редактирования, и я не хочу использовать QTableWidget / -Item.

Обновление:

CheckBox будет автоматически вставлен Qt, когда я вызову setCheckState для элемента:

QTreeWidgetItem *item = new QTreeWidgetItem(ui.TreeWidget);
item->setCheckState(0, Qt::Checked);

После new элемент не имеет CheckBox (по умолчанию Qt). При вызове setCheckState(...) я автоматически вставляю CheckBox (здесь, в столбце 0) с Qt::CheckState, который я хочу.

Но после того, как я это сделал, удалить CheckBox невозможно - так кажется.

Может быть, у кого-нибудь есть решение, как я могу избавиться от этого CheckBox позже? Любая помощь очень ценится!

1 Ответ

5 голосов
/ 14 августа 2011

Это сделает это:

item->setData(0, Qt::CheckStateRole, Qt::Unchecked);        //Unchecked checkbox
item->setData(0, Qt::CheckStateRole, Qt::Checked);          //Checked checkbox
item->setData(0, Qt::CheckStateRole, Qt::PartiallyChecked); //Partially checked checkbox (gray)

item->setData(0, Qt::CheckStateRole, QVariant());           //No checkbox at all (what you wanted)

Метод setCheckState не может установить «состояние без проверки», только Checked, PartiallyChecked или Unckecked.

...