QTreeWidget/QTreeView的使用

头文件:

#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);
             }
        }
}

实例:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_40194498/article/details/80311147
今日推荐