禁用QTreeWidgetItem的列或删除set CheckBox

时间:2010-10-21 11:30:38

标签: c++ qt qtreewidgetitem

我在QTreeWidgetItem中设置了QTreeWidget,其中包含2列。两个单元格都由setCheckState(...)设置了CheckBox。

当用户在我的第一列中取消选中CheckBox时,我取消选中第2列中的第二个CheckBox。

现在,我想阻止用户再次检查第二个CheckBox。是否可以在第2列中删除此CheckBox或仅禁用此单元格? 到目前为止,我刚刚看到所有标志都在整个项目上工作,并且一组CheckBox不会消失。

顺便说一下。这些项目不可编辑,我不想使用QTableWidget / -Item

更新

当我为项目调用setCheckState时,Qt会自动插入CheckBox:

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

new项之后没有CheckBox(默认为Qt)。调用setCheckState(...)我自动在我想要的Qt::CheckState处插入一个CheckBox(在第0列)。

但是在我完成它之后就没办法删除CheckBox了 - 所以看起来好像。

也许有人有一个解决方案,我怎么能在以后摆脱这个CheckBox?非常感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

这样做:

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方法不能设置'no check state',只能设置Checked,PartiallyChecked或Unckecked。