Qt QTreeWidget使用教程代码讲解

这篇文章主要为大家详细介绍了Qt中QTreeWidget使用的相关资料,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,感兴趣的小伙伴可以了解一下

目录

  • 一.常用API设置
  • 二.设置带checkBox
  • 三.右键菜单
  • 四.设置qss
  • 五.运行效果
  • 六.多列树

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

一、常用API设置

1.添加顶层节点

    //添加顶层节点
    QTreeWidgetItem *topItem1 = new QTreeWidgetItem(ui->treeWidget);
    topItem1->setText(0,"百度");
    ui->treeWidget->addTopLevelItem(topItem1);

2.设置表头隐藏,展开所有项

    //隐藏表头
    ui->treeWidget->setHeaderHidden(true);
    //设置展开
    ui->treeWidget->expandAll();

3.顶层节点添加子节点

    QTreeWidgetItem *item11 = new QTreeWidgetItem(topItem1);
    item11->setText(0,"研发部");
    QTreeWidgetItem *item12 = new QTreeWidgetItem(topItem1);
    item12->setText(0,"销售部");
    QTreeWidgetItem *item13 = new QTreeWidgetItem(topItem1);
    item13->setText(0,"人事部");

4.节点可以带一些数据,使用setData()这个接口

    //设置数据,可以带多种数据
    item11->setData(0,Qt::UserRole,100/*人员数量*/);
    item11->setData(0,Qt::UserRole+1,"李彦宏"/*负责人名字*/);
 
    //获得数据
    item11->data(0,Qt::UserRole).toInt();
    item11->data(0,Qt::UserRole+1).toString();

5.节点可以设置自定义类型,设置图标、flags、文本

//自定义枚举
enum NodeType
{
    ROOT = 0,
    SON 
};
 
QTreeWidgetItem *item = new QTreeWidgetItem(ROOT);
//item->setIcon();
//item->setText();
//item->setFlags();

二、设置带checkBox

    QTreeWidgetItem *topItem2 = new QTreeWidgetItem(ui->treeWidget);
    topItem2->setText(0,"腾讯");
    topItem2->setCheckState(0,Qt::Checked);
    ui->treeWidget->addTopLevelItem(topItem2);
 
    QTreeWidgetItem *item21 = new QTreeWidgetItem(topItem2);
    item21->setText(0,"研发部");
    item21->setCheckState(0,Qt::Checked);
 
    QTreeWidgetItem *item22 = new QTreeWidgetItem(topItem2);
    item22->setText(0,"销售部");
    item22->setCheckState(0,Qt::Checked);
 
    QTreeWidgetItem *item23 = new QTreeWidgetItem(topItem2);
    item23->setText(0,"人事部");
    item23->setCheckState(0,Qt::Checked);

简单的响应一下点击信号,当顶层节点选中,下面的所有子节点全选中

    connect(ui->treeWidget,&QTreeWidget::itemClicked,this,
            &Form::slotClicked);
 
    void Form::slotClicked(QTreeWidgetItem *item, int column)
    {
        //简单响应一下选中状态槽函数
        for (int i=0; i<item->childCount(); i++)
        {
           QTreeWidgetItem *pChildItem = item->child(i);
           pChildItem->setCheckState(0,item->checkState(0));
        }
    }

三、右键菜单

    //打开右键菜单属性
    ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
 
    //右键菜单
    m_menu = new QMenu(ui->treeWidget);
    m_menu->addAction("添加");
    m_menu->addAction("删除");
 
    //响应右键菜单信号槽
    connect(ui->treeWidget,&QTreeWidget::customContextMenuRequested,
            this,&Form::slotMenuPopup);
    
    void Form::slotMenuPopup(const QPoint &pos)
    {
        m_menu->exec(ui->treeWidget->mapToGlobal(pos));
    }

四、设置qss

这里简单设置一下背景色,展开/合并时的图标,item的一些设置,仅供参考。

const QString styles = "QTreeView\
{\
    background-color: #5B677A;\
    font-size:17px;\
    color: white;\
}\
QTreeView::item:hover\
{\
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);\
    border: 1px solid #bfcde4;\
}\
QTreeView::item:hover\
{\
    background: rgb(69, 187, 217);\
}\
QTreeView::item:selected:active\
{\
    background: rgb(63, 147, 168);\
}\
QTreeView::item:selected:!active\
{\
    background: rgb(63, 147, 168);\
}\
QTreeView::branch\
{\
    background:#5B677A;\
}\
QTreeView::branch:has-children:!has-siblings:closed,QTreeView::branch:closed:has-children:has-siblings\
{\
    border-image: none;\
    background:#5B677A;\
    image: url(image/Folder-1.png);\
}\
QTreeView::branch:open:has-children:!has-siblings,QTreeView::branch:open:has-children:has-siblings\
{\
    border-image: none;\
    background:#5B677A;\
    image: url(image/Open-Folder.png);\
}";

调用ui->treeWidget->setStyleSheet(styles);就行了

五、运行效果

六、多列树

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
 
const QString sstyle = "\
QHeaderView::section\
{\
    background-color: white;\
}";
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    QStringList strList;
    strList<<"名称"<<"年龄"<<"性别";
    ui->treeWidget->setHeaderLabels(strList);
    ui->treeWidget->header()->setStyleSheet(sstyle);
 
    QTreeWidgetItem *item1 = new QTreeWidgetItem(QStringList()<<"七年级");
    ui->treeWidget->addTopLevelItem(item1);
 
    QTreeWidgetItem *item11 = new QTreeWidgetItem(QStringList()<<"小涨"<<"13"<<"男");
    item1->addChild(item11);
    QTreeWidgetItem *item12 = new QTreeWidgetItem(QStringList()<<"小红"<<"14"<<"女");
    item1->addChild(item12);
    QTreeWidgetItem *item13 = new QTreeWidgetItem(QStringList()<<"小丽"<<"13"<<"女");
    item1->addChild(item13);
 
    QTreeWidgetItem *item2 = new QTreeWidgetItem(QStringList()<<"八年级");
    ui->treeWidget->addTopLevelItem(item2);
 
    QTreeWidgetItem *item21 = new QTreeWidgetItem(QStringList()<<"小涨"<<"13"<<"男");
    item2->addChild(item21);
    QTreeWidgetItem *item22 = new QTreeWidgetItem(QStringList()<<"小红"<<"14"<<"女");
    item2->addChild(item22);
    QTreeWidgetItem *item23 = new QTreeWidgetItem(QStringList()<<"小丽"<<"13"<<"女");
    item2->addChild(item23);
 
    QTreeWidgetItem *item3 = new QTreeWidgetItem(QStringList()<<"九年级");
    ui->treeWidget->addTopLevelItem(item3);
 
    QTreeWidgetItem *item31 = new QTreeWidgetItem(QStringList()<<"小涨"<<"13"<<"男");
    item3->addChild(item31);
    QTreeWidgetItem *item32 = new QTreeWidgetItem(QStringList()<<"小红"<<"14"<<"女");
    item3->addChild(item32);
    QTreeWidgetItem *item33 = new QTreeWidgetItem(QStringList()<<"小丽"<<"13"<<"女");
    item3->addChild(item33);
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{
    qDebug()<<item->text(0);
    qDebug()<<item->text(1);
    qDebug()<<item->text(2);
}

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QTreeWidgetItem右键菜单是指在QTreeWidget中的每个QTreeWidgetItem上右键点击时弹出的菜单。这个菜单可以自定义,可以根据不同的需求添加不同的选项和功能。一般来说,右键菜单可以用于对QTreeWidgetItem进行操作,比如删除、编辑、复制等。在实现QTreeWidgetItem右键菜单时,需要使用QMenu和QAction类,通过信号和槽机制来实现菜单项的响应。 ### 回答2: 在Qt中,QTreeWidget是一种用于显示带有树形结构的数据的小部件。QTreeWidgetItem则是用于填充QTreeWidget的数据项,并且QTreeWidgetItem可以自定义其表现和样式,同时也支持右键菜单的功能。 QTreeWidgetItem右键菜单可以通过重写其contextMenuEvent函数来实现。contextMenuEvent函数可以捕获并响应鼠标右键菜单事件,所以我们可以在该函数中添加自定义的菜单项和操作。 具体实现的步骤如下: 1. 创建QMenu对象,该对象的作用是用于展示右键菜单。 2. 添加菜单项,如Action1、Action2等, 这些菜单项可以在构造函数中创建,并连接到相应的槽函数中。 3. 使用popup方法在指定的位置弹出右键菜单,菜单的位置可以通过QCursor::pos()获取,表示鼠标当前的位置。 4. 在QTreeWidgetItem的contextMenuEvent函数中添加判断语句,判断鼠标是否是右键点击,如果是,则使用创建的QMenu对象来展示右键菜单。 示例代码如下: ``` void Widget::contextMenuEvent(QContextMenuEvent *event) { if(event->reason()==QContextMenuEvent::Mouse) { QMenu *menu = new QMenu(this); QAction *action1 = new QAction(tr("Action1"), this); QAction *action2 = new QAction(tr("Action2"), this); connect(action1, &QAction::triggered, this, &Widget::onAction1); connect(action2, &QAction::triggered, this, &Widget::onAction2); menu->addAction(action1); menu->addAction(action2); menu->popup(QCursor::pos()); } } void Widget::onAction1() { qDebug() << "Action1 triggered"; } void Widget::onAction2() { qDebug() << "Action2 triggered"; } ``` 在这段代码中,我们在QTreeWidgetItem的contextMenuEvent函数中创建了一个QMenu对象,并初始化了两个菜单项Action1和Action2,并将它们连接到槽函数onAction1和onAction2中。当鼠标右键点击时,会弹出右键菜单,点击对应的菜单项则会执行相应的操作。 ### 回答3: QTreeWidgetItemQt 中用来处理树形结构的重要控件,类似于树形菜单。当用户在 QTreeWidgetItem 上右键单击时,可能需要显示右键菜单,以便用户执行相关操作。在 Qt 中,实现 QTreeWidgetItem 右键菜单的方法比较灵活,但一般可以通过以下步骤进行: 1. 为 QTreeWidget 注册右键菜单: 要使用 QTreeWidgetItem 右键菜单,首先需要为 QTreeWidget 控件注册右键菜单事件。这可以通过 QWidget 的 setContextMenuPolicy() 函数来实现。此函数参数为 Qt::ContextMenuPolicy 枚举值,可以将其设置为 Qt::CustomContextMenu,表示允许自定义右键菜单。 例如: treeWidget->setContextMenuPolicy(Qt::CustomContextMenu); 2. 实现 QTreeWidget 的右键菜单事件: 当用户在 QTreeWidgetItem 上右键单击时,QTreeWidget 会触发 customContextMenuRequested() 信号,程序应该在该信号的槽函数中实现右键菜单的显示和响应操作。 例如: void MainWindow::on_treeWidget_customContextMenuRequested(const QPoint &pos) { QTreeWidgetItem *item = treeWidget->itemAt(pos); if (item == NULL) return; QMenu menu; QAction *action = menu.addAction(tr("Rename")); connect(action, &QAction::triggered, this, &MainWindow::renameItem); menu.exec(treeWidget->mapToGlobal(pos)); } 在此槽函数中,我们首先获取被右键单击的 QTreeWidgetItem 对象,然后创建 QMenu 对象并添加菜单项,最后调用 QMenu 的 exec() 函数将菜单显示在正确位置。 3. 实现菜单响应操作: 在创建菜单项时,可以通过 connect() 函数将其与相应的槽函数连接起来。当菜单项被选中时,对应的槽函数就会被执行。 例如: void MainWindow::renameItem() { QTreeWidgetItem *item = treeWidget->currentItem(); QString name = QInputDialog::getText(this, tr("Rename"), tr("Enter a new name for the item:"), QLineEdit::Normal, item->text(0)); if (!name.isEmpty()) { item->setText(0, name); } } 在 renameItem() 槽函数中,我们首先获取当前被选中的 QTreeWidgetItem 对象,然后使用 QInputDialog::getText() 函数弹出一个对话框,提示用户输入新的项目名称。如果用户输入了名称,就将其更新到 QTreeWidgetItem 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值