本文主要是介绍如何隐藏QTreeWidgetItem 的checkbox,且当没有勾选QTreeWidget的子节点时,对话框的Ok按钮禁用,有勾选的,则高亮启用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
此电脑,是根节点QTreeWidgetItem,当item->setData(0, Qt::CheckStateRole, QVariant());后就会隐藏checkBox
item->setCheckState(0, Qt::PartiallyChecked);
item->setCheckState(0, Qt::Unchecked);
item->setCheckState(0, Qt::Checked);
以上三种状态都会显示checkbox
//当点击目录树,就会响应下面这个函数,去改变整个目录节点的状态,而此时需求需要根节点没有CHeckbox,
item->parent() == NULL) //表示此时是根节点 此时通过根节点判断是否有勾选项,再发送一个信号,通知去显示或隐藏确定按钮,再隐藏根节点的checkbox
void CLocalDirTreeWgt::UpdateRightLeftTreeWidgetParentItem(QTreeWidgetItem* item)
{
if (item == NULL)//表明点击的就是根节点
{
return;
}
int selectedCount = 0;
bool bHavePartiallyChecked = false;
int childCount = item->childCount();
for (int i = 0; i < childCount; i++) //判断有多少个子项被选中
{
QTreeWidgetItem* childItem = item->child(i);
if (childItem->checkState(0) == Qt::Checked)
{
selectedCount++;
}
if (childItem->checkState(0) == Qt::PartiallyChecked)
{
bHavePartiallyChecked = true;
}
}
m_bLeftChange = false;
FILE_NODE info = item->data(0, FILE_TYPE).value<FILE_NODE>();
if (bHavePartiallyChecked)
{
item->setCheckState(0, Qt::PartiallyChecked);
}
else
{
if ((childCount > 0) && (selectedCount <= 0)) //如果没有子项被选中,父项设置为未选中状态
{
item->setCheckState(0, Qt::Unchecked);
}
else if (selectedCount > 0 && selectedCount < childCount) //如果有部分子项被选中,父项设置为部分选中状态,即用灰色显示
{
item->setCheckState(0, Qt::PartiallyChecked);
}
else if (selectedCount == childCount) //如果子项全部被选中,父项则设置为选中状态
{
item->setCheckState(0, Qt::Checked);
}
}
if (item->parent() == NULL) //表示此时是根节点
{
if ((m_rootLeftItem->checkState(0) == Qt::Checked) || (m_rootLeftItem->checkState(0) == Qt::PartiallyChecked))
{
sigOkBtnisOk(true);
}
else
{
sigOkBtnisOk(false);
}
item->setData(0, Qt::CheckStateRole, QVariant());
}
UpdateRightLeftTreeWidgetParentItem(item->parent());
}
这篇关于如何隐藏QTreeWidgetItem 的checkbox,且当没有勾选QTreeWidget的子节点时,对话框的Ok按钮禁用,有勾选的,则高亮启用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!