qt QTreeWidget 学习

树形控件的节点可以有多层、多个子节点, 如果将子节点全部展开,那么每一行都是一个数据条目。QTreeWidgetItem 比较特殊,一个条目内部可以有多列数据信息,相当于表格控件一整行的表格单元集成为一个条目。

 默认情况下,树形控件最上面是一个树头条目,树头条目也是 QTreeWidgetItem 对象,可以有多列内容。

树头下面是真正的树形控件所有条目,在折叠的情况下,如上图所示,每行一个顶级条目,顶级条目也是 QTreeWidgetItem 对象,顶级条目的父节点指针 QTreeWidgetItem::​parent() 为 NULL

QTreeWidget

顶级条目进行计数

int QTreeWidget::​topLevelItemCount() const

获取顶级条目

QTreeWidgetItem *topLevelItem(int index) const;

添加顶级条目

void addTopLevelItem(QTreeWidgetItem *item);

移除顶级条目

QTreeWidgetItem *takeTopLevelItem(int index);

清空所有的顶级条目和子条目

 void clear();

获取当前高亮选中条目的函数为

 QTreeWidgetItem *currentItem() const;

设置某个条目为当前选中的状态

void setCurrentItem(QTreeWidgetItem *item);

当前高亮选中的状态发生变化,会触发如下信号

void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);

QTreeWidgetItem

获取某列的数据

QString text(int column)

virtual QVariant data(int column, int role) const;

设置某列的数据

void setText(int column, const QString &text)

virtual void setData(int column, int role, const QVariant &value);

获取某列图标

inline QIcon icon(int column) const

设置某列图标

inline void setIcon(int column, const QIcon &icon);

添加子项

void addChild(QTreeWidgetItem *child);

void addChildren(const QList<QTreeWidgetItem*> &children);

当前条目的操作

QTreeWidgetItem *currentItem() const;   //获取当前高亮选中条目

int currentColumn() const;   //当前条目被点击选中的列号

void setCurrentItem(QTreeWidgetItem *item); //设置某个条目为当前选中的状态

常用的信号

如果当前高亮选中的状态发生变化

void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);

void itemActivated(QTreeWidgetItem * item, int column) //条目列被激活

void itemChanged(QTreeWidgetItem * item, int column)   //条目列的数据发生变化,比如文本或图标修改了

void itemClicked(QTreeWidgetItem * item, int column)  //条目列被单击

void itemDoubleClicked(QTreeWidgetItem * item, int column) //条目列被双击

void itemEntered(QTreeWidgetItem * item, int column) //进入条目列

void itemPressed(QTreeWidgetItem * item, int column) //条目列被点击按下

void QTreeWidget::​itemExpanded(QTreeWidgetItem * item)  //条目展开时发送信号

void QTreeWidget::​itemCollapsed(QTreeWidgetItem * item) //条目折叠时发送信号

代码例子

#ifndef WIDGET_H

#define WIDGET_H



#include <QWidget>

#include <QTreeWidget>

QT_BEGIN_NAMESPACE

namespace Ui { class Widget; }

QT_END_NAMESPACE



class Widget : public QWidget

{

    Q_OBJECT



public:

    Widget(QWidget *parent = nullptr);

    ~Widget();



    void createtree();

    QTreeWidget *tree;



public slots:

    void curItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);

    void itemselected(QTreeWidgetItem *item,int column);



public:

    void setselected(QTreeWidgetItem *item,Qt::CheckState state);



private:

    Ui::Widget *ui;

};

#endif // WIDGET_H





#include "widget.h"

#include "ui_widget.h"

#include <QDebug>



Widget::Widget(QWidget *parent)

    : QWidget(parent)

    , ui(new Ui::Widget)

{

    ui->setupUi(this);

    createtree();

}



Widget::~Widget()

{

    delete ui;

}



void Widget::createtree()

{

    tree = new QTreeWidget(this);

    tree->resize(400, 300);  // 设置控件大小为 400 x 300

    tree->move(100, 100);    // 设置控件在窗口中的位置为 (100, 100)



    tree->setColumnCount(2);                           // 设置列数为 2

    tree->setHeaderLabels({"Name", "Value"});          // 设置列标题为 "Name" 和 "Value"





    QTreeWidgetItem *root = new QTreeWidgetItem(tree);   // 创建一个根节点

    root->setText(0, "Root");                            // 设置节点文本

    root->setText(1, "0");                               // 设置节点文本

    root->setCheckState(0,Qt::Checked);

    tree->addTopLevelItem(root);                         // 将节点添加到 QTreeWidget 中







    QTreeWidgetItem *child1 = new QTreeWidgetItem(root); // 创建一个子节点

    child1->setText(0, "Child 1");                       // 设置节点文本

    child1->setText(1,"10"); // 设置节点文本''

    child1->setCheckState(0,Qt::Checked);

    root->addChild(child1); // 将节点添加到根节点下



    QTreeWidgetItem *child11 = new QTreeWidgetItem(child1); // 创建一个子节点

    child11->setText(0, "Child 11");                       // 设置节点文本

    child11->setText(1,"100"); // 设置节点文本''

    child11->setCheckState(0,Qt::Checked);

    child1->addChild(child11); // 将节点添加到根节点下



    QTreeWidgetItem *child2 = new QTreeWidgetItem(root); // 创建一个子节点

    child2->setText(0, "Child 2");                       // 设置节点文本

    child2->setText(1,"20"); // 设置节点文本

    child2->setCheckState(0,Qt::Checked);

    root->addChild(child2); // 将节点添加到根节点下



    connect(tree,SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem*)),this,SLOT(curItemChanged(QTreeWidgetItem *, QTreeWidgetItem*)));

    connect(tree,SIGNAL(itemClicked(QTreeWidgetItem *,int)),this,SLOT(itemselected(QTreeWidgetItem *,int)));

    tree->show();

}



void Widget::curItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)

{

    if(current != nullptr)

    {

         qDebug() << current->text(0);

    }

}



void Widget::itemselected(QTreeWidgetItem *item,int column)

{

    if(column == 0)

    {

        Qt::CheckState state = item->checkState(0);

        if(state == Qt::Checked || state == Qt::Unchecked)

        {

            setselected(item,state);

        }

    }

}



void Widget::setselected(QTreeWidgetItem *item,Qt::CheckState state )

{

    int ncount = item->childCount();

    for(int i = 0; i <ncount; i++)

    {

        QTreeWidgetItem *child = item->child(i);

        child->setCheckState(0,state);

        if(child->childCount() > 0)

            setselected(child,state);

    }

}

相关推荐

  1. 学习 学习

    2024-04-28 18:36:03       40 阅读
  2. 学期学习计划

    2024-04-28 18:36:03       23 阅读
  3. 学习笔记:机器学习

    2024-04-28 18:36:03       58 阅读
  4. C++学习-List学习

    2024-04-28 18:36:03       30 阅读
  5. opencv学习 机器学习

    2024-04-28 18:36:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 18:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 18:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 18:36:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 18:36:03       20 阅读

热门阅读

  1. Typescript 学习笔记

    2024-04-28 18:36:03       14 阅读
  2. nginx负载均衡策略

    2024-04-28 18:36:03       15 阅读
  3. golang sync pool

    2024-04-28 18:36:03       10 阅读
  4. 陕西省工程系列高级职称评审申报指南

    2024-04-28 18:36:03       13 阅读
  5. Viewpage+TabLayout+Fragment常用功能实现

    2024-04-28 18:36:03       15 阅读
  6. sql将日期区间拆分为多行

    2024-04-28 18:36:03       15 阅读
  7. 代码随想录训练营25day-贪心算法3

    2024-04-28 18:36:03       13 阅读
  8. 常用的启发式算法及其应用

    2024-04-28 18:36:03       13 阅读
  9. 【NC16619】传球游戏

    2024-04-28 18:36:03       13 阅读
  10. Gromacs——教程学习(4)

    2024-04-28 18:36:03       12 阅读
  11. 通过ffmpeg 下载在线的.m3u8格式视频

    2024-04-28 18:36:03       10 阅读