如何隐藏QTreeWidgetItem 的checkbox,且当没有勾选QTreeWidget的子节点时,对话框的Ok按钮禁用,有勾选的,则高亮启用

如何隐藏QTreeWidgetItem 的checkbox,且当没有勾选QTreeWidget的子节点时,对话框的Ok按钮禁用,有勾选的,则高亮启用
没有勾选
如何隐藏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());
}