QTreeWidget简单使用

来源:互联网 发布:c语言求最短路径 编辑:程序博客网 时间:2024/06/07 05:19

mytreetest.h文件

#ifndef MYTREETEST_H#define MYTREETEST_H#include <QWidget>#include<QTreeWidget>#include<QTreeWidgetItem>class MyTreeTest : public QWidget{    Q_OBJECTpublic:    explicit MyTreeTest(QWidget *parent = 0);    void init();    void updateParentItem(QTreeWidgetItem* item);signals:public slots:    void treeItemChanged(QTreeWidgetItem* item, int column);private:    QTreeWidget* m_treeWidget;};#endif // MYTREETEST_H

mytreetest.cpp文件

#include "mytreetest.h"#include <QDebug>MyTreeTest::MyTreeTest(QWidget *parent) : QWidget(parent){    m_treeWidget = new QTreeWidget(this);    init();    connect(m_treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*, int)),                this, SLOT(treeItemChanged(QTreeWidgetItem*, int)));}void MyTreeTest::init(){    m_treeWidget->clear();    //第一个分组    QTreeWidgetItem *g1 = new QTreeWidgetItem(m_treeWidget);    g1->setText(0, "g1");    g1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt:: ItemIsSelectable);    g1->setCheckState(0, Qt::Unchecked);    QTreeWidgetItem *s11 = new QTreeWidgetItem(g1);    s11->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt:: ItemIsSelectable);    s11->setText(0, "s11");    s11->setCheckState(0, Qt::Unchecked);    QTreeWidgetItem *s12 = new QTreeWidgetItem(g1);    s12->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt:: ItemIsSelectable);    s12->setText(0, "s12");    s12->setCheckState(0, Qt::Unchecked);    //第二个分组    QTreeWidgetItem *g2 = new QTreeWidgetItem(m_treeWidget);    g2->setText(0, "g2");    g2->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt:: ItemIsSelectable);    g2->setCheckState(0, Qt::Unchecked);    QTreeWidgetItem *s21 = new QTreeWidgetItem(g2);    s21->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt:: ItemIsSelectable);    s21->setText(0, "s21");    s21->setCheckState(0, Qt::Unchecked);}void MyTreeTest::updateParentItem(QTreeWidgetItem *item){    QTreeWidgetItem *parent = item->parent();    if (parent == NULL)    {         return;    }    int selectedCount = 0;    int partiallyCount = 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 (childItem->checkState(0) == Qt::PartiallyChecked)         {                partiallyCount++;         }    }    if (selectedCount <= 0)    {         //选中状态         parent->setCheckState(0, Qt::Unchecked);    }    else if (selectedCount > 0 && selectedCount < childCount)    {         //部分选中状态         parent->setCheckState(0, Qt::PartiallyChecked);    }    else if (selectedCount == childCount)    {     if(partiallyCount>0){         parent->setCheckState(0, Qt::PartiallyChecked);     }else{         parent->setCheckState(0, Qt::Checked);     }         //未选中状态    }}void MyTreeTest::treeItemChanged(QTreeWidgetItem *item, int column){    QString itemText = item->text(0);    qDebug() << "itemText=" << itemText;    //选中时    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           {                //是子节点                updateParentItem(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           {                updateParentItem(item);           }    }    else{        updateParentItem(item);    }}

运行效果

这里写图片描述

原创粉丝点击