QTreeWidget/QTreeView的使用

本文介绍如何使用Qt的QStandardItemModel创建可检查的树形视图,并通过信号槽机制实现父节点与子节点选中状态的同步更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件:

#include <QStandardItem>
#include <QStandardItemModel> 
#include <QTreeView>

源码:

QStandardItemModel *model = new QStandardItemModel(treeView);  
//树节点改变时触发此信号
connect(model,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(treeItemChanged(QStandardItem*))); 

    QIcon treeitemicon(":/resource/treeitem");
    QIcon treerooticon(":/resource/treerootitem");

    //set header
        model->setHorizontalHeaderLabels(QStringList()<<QString("Setting"));
    //add RootItem
        QStandardItem* itemProject = new QStandardItem(treerooticon,QString("atmosphere"));
        QStandardItem* itemProject1 = new QStandardItem(treerooticon,QString("pollution"));
        itemProject->setCheckable(true);
        itemProject1->setCheckable(true);
    //set RootItem checkable
        model->appendRow(itemProject);
        model->appendRow(itemProject1);

    //add item
        QStandardItem* itemChild = new QStandardItem(treeitemicon,QString("childitem"));
        QStandardItem* itemChild1 = new QStandardItem(treeitemicon,QString("childitem1"));
        QStandardItem* itemChild2 = new QStandardItem(treeitemicon,QString("childitem2"));
        QStandardItem* itemChild3 = new QStandardItem(treeitemicon,QString("childitem3")); 

        //set ChildItem checkable
        itemChild->setCheckable(true);
        itemChild1->setCheckable(true);
        itemChild2->setCheckable(true);
        itemChild3->setCheckable(true); 
        //定义QList
        QList<QStandardItem*>ItemList; 
        QList<QStandardItem*>ItemList2;
//        ItemList.append(itemChild);
//        ItemList.append(itemChild1); 
//将节点加入QList
        ItemList<<itemChild<<itemChild1;
        ItemList2<<itemChild2<<itemChild3; 
//添加多个子节点,添加单个子节点时用appendRow
        itemProject->appendRows(ItemList);
        itemProject1->appendRows(ItemList2);  
        treeView->setModel(model);

void Widget::treeItemChanged(QStandardItem *item)
{   qDebug()<<"item changed trigger"; 
    //如果节点可选并且含有子节点
    if ( item->isCheckable()&&item->hasChildren())
        {

            Qt::CheckState state = item->checkState (); //获取当前的选择状态 
            //同步父子节点的状态
             for(int i = 0;i<item->rowCount();++i)
             {
                 QStandardItem* childItems = item->child(i);
                 childItems->setCheckState(state);
             }
        }
}

实例:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值