文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

QT学习之[QTreeWidgetItem]详解,示例

2023-09-21 14:13

关注

QTreeWidgetItem

树形控件,当选中顶层树形节点时,子节点全部被选中,当取消选择顶层数节点时,子节点全部被取消,当选中子节点时候,父节点显示被选中,示例如下:

用法以及API详解如图:

图片AIt
在这里插入图片描述

第一步:

双击UI文件选择,打开ui设计器,拖拽一个Tree Widget 控件,

第二步:

在.h头文件中添加代码:

#include 

在widget声明处添加代码:

public:    Widget(QWidget *parent = nullptr);    ~Widget();    void init();    void updataParentItem(QTreeWidgetItem* item);private slots:    void treeItemChanged(QTreeWidgetItem* item,int column);private:    QTreeWidgetItem* group1;    QTreeWidgetItem* group2;    QTreeWidgetItem* group3;    QTreeWidgetItem* subItem1;    QTreeWidgetItem* subItem2;    QTreeWidgetItem* subItem3;    QTreeWidgetItem* subItem4;    QTreeWidgetItem* subItem5;    QTreeWidgetItem* subItem6;    QTreeWidgetItem* subItem7;    QTreeWidgetItem* subItem8;    QTreeWidgetItem* subItem9;

在widget构造函数添加代码:

 //初始化页面    init();    //发射信号接受相应    connect(ui>treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));}

init():

void Widget::init(){    ui->treeWidget->clear();    //第一个分组   group1 = new QTreeWidgetItem(ui->treeWidget);   group1->setText(0,"group1");   group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   group1->setCheckState(0,Qt::Unchecked);   subItem1 = new QTreeWidgetItem(group1);   subItem1->setText(0,"subItem1");   subItem1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem1->setCheckState(0,Qt::Unchecked);   subItem2 = new QTreeWidgetItem(group1);   subItem2->setText(0,"subItem2");   subItem2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem2->setCheckState(0,Qt::Unchecked);   subItem3 = new QTreeWidgetItem(group1);   subItem3->setText(0,"subItem3");   subItem3->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem3->setCheckState(0,Qt::Unchecked);   subItem4 = new QTreeWidgetItem(group1);   subItem4->setText(0,"subItem4");   subItem4->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem4->setCheckState(0,Qt::Unchecked);    //分组2   group2 = new QTreeWidgetItem(ui->treeWidget);   group2->setText(0,"group2");   group2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   group2->setCheckState(0,Qt::Unchecked);   subItem5 = new QTreeWidgetItem(group2);   subItem5->setText(0,"subItem5");   subItem5->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem5->setCheckState(0,Qt::Unchecked);   subItem6 = new QTreeWidgetItem(group2);   subItem6->setText(0,"subItem6");   subItem6->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem6->setCheckState(0,Qt::Unchecked);   subItem7 = new QTreeWidgetItem(group2);   subItem7->setText(0,"subItem7");   subItem7->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem7->setCheckState(0,Qt::Unchecked);   subItem8 = new QTreeWidgetItem(group2);   subItem8->setText(0,"subItem8");   subItem8->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);   subItem8->setCheckState(0,Qt::Unchecked);}

updataParentItem():

void Widget::updataParentItem(QTreeWidgetItem *item){    QTreeWidgetItem* parent = item->parent();    if(parent == NULL)    {        return;    }    int selectedCount = 0;    int ChildCount = parent->childCount();    for (int i = 0;i < ChildCount; i++) {        QTreeWidgetItem* childItem = parent->child(i);        if(childItem->checkState(0) == Qt::Checked)        {            selectedCount++;        }    }    if(selectedCount <= 0)    {        //未选中        parent->setCheckState(0,Qt::Unchecked);    }    else if(selectedCount > 0 && selectedCount < ChildCount)    {        //部分选中        parent->setCheckState(0,Qt::PartiallyChecked);    }    if(selectedCount == ChildCount)    {        //全选中        parent->setCheckState(0,Qt::Checked);    }}

treeItemChanged():

//QTreeWidgetItem自带的信号changItem两个参数,所以这里槽函数也有两个参数void Widget::treeItemChanged(QTreeWidgetItem *item,int column){    QString itemText = item->text(0);    //选中时候未点击    if(Qt::Checked == item->checkState(0))    {        //QTreeWidgetItem* parent = item->parent();        int count = item->childCount();        if(count > 0)        {            for (int i = 0;i < count;i++) {                //子节点选中                item->child(i)->setCheckState(0,Qt::Checked);            }        }        else        {            //是子节点           updataParentItem(item);        }    }    else if (Qt::Unchecked == item->checkState(0))    {        int count = item->childCount();        if(count > 0)        {            for (int i = 0;i < count;i++) {                //子节点选中                item->child(i)->setCheckState(0,Qt::Unchecked);            }        }        else        {           updataParentItem(item);        }    }}

来源地址:https://blog.csdn.net/m0_68197012/article/details/130035626

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯