禁用QTreeWidgetItem中的一列或移除设置的复选框。

3

我在一个带有两列的QTreeWidget中设置了一个QTreeWidgetItem。两个单元格都通过setCheckState(...)设置了一个复选框。

当用户取消勾选第一列的复选框时,我会取消勾选第二列中的复选框。

现在,我想防止用户再次勾选这个第二列的复选框。是否可以删除第二列的此复选框或仅禁用此单元格? 到目前为止,我只看到所有标志都作用于整个项目,设置的复选框不会消失。

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

更新:

当我为该项目调用setCheckState时,Qt会自动插入复选框:

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

在使用new创建一个项目后,默认情况下该项目不拥有复选框。调用setCheckState(...)会自动插入一个复选框(这里是在第0列),并设置所需的Qt::CheckState
但是一旦插入了复选框,似乎就无法再将其移除了。
也许有人能提供解决方案,以便在以后的某个时间点上去掉这个复选框?非常感谢任何帮助!

你能告诉我如何在QTreeWidgetItem中添加两个复选框吗?如果你将它们保存在一个变量中,你就可以访问它们(以及它们的方法)。 - Live
1个回答

9
这样做就可以了:
item->setData(0, Qt::CheckStateRole, QVariant());           //No checkbox at all (what you wanted)

任何其他的选项都会显示复选框空间。
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)

setCheckState方法无法设置“无选中状态”,只能设置已选中、部分选中或未选中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接