首页 文章

禁用QTreeWidgetItem的列或删除set CheckBox

提问于
浏览
2

我有 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(...) 我自动插入一个CheckBox(在第0列)和我想要的 Qt::CheckState .

但是在我完成之后,就没有办法删除CheckBox - 所以看起来如此 .

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

1 回答

  • 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 .

相关问题