QTreeWidget详解「建议收藏」

QTreeWidget详解「建议收藏」树形结构在GUI中很常见,在Qt中,我们可以通过QTreeWidget类构造树形结构。本文对有关QTreeWidget的基本知识点进行了总结。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

  树形结构在GUI中很常见,在Qt中,我们可以通过QTreeWidget类构造树形结构。QTreeWidget以树的形式显示各个项,每个项使用QTreeWidgetItem来表示。本文对有关QTreeWidget的基本知识点进行了总结。

QTreeWidget初始化

  QTreeWidget样式初始化,这里罗列几个基本的配置,包括框架样式、设置头的标题、头的标题是否隐藏、展示的列数:

void myMainWindow::TreeWidget_Init()
{
    ui->treeWidget->clear();    //QTreeWidget清空
    ui->treeWidget->setFrameStyle(QFrame::NoFrame);  //框架样式
    ui->treeWidget->setHeaderLabel("tree widget");  //设置头的标题
    ui->treeWidget->setHeaderHidden(true);     //tree widget头标题是否显示,此处隐藏标题
    ui->treeWidget->setColumnCount(1);    //tree widget展示的列数
}

QTreeWidget树形结构实现

树形实现

  可以通过向QTreeWidget添加顶层节点,顶层节点添加子节点,依次这样添加节点的方式构造树形结构,用法如下:

void myMainWindow::mcu_test_case()
{
    QTreeWidgetItem *Global_item=new QTreeWidgetItem(QStringList()<<"STM32");   //顶层节点
    Global_item->setFont(0,QFont("Calibri",10,QFont::Bold));     //节点字体样式
    ui->treeWidget->addTopLevelItem(Global_item);      //顶层节点添加到QTreeWidget中

    QTreeWidgetItem *item_1=new QTreeWidgetItem(QStringList()<<"USART");   //在顶层节点下添加节点
    Global_item->addChild(item_1);

    QTreeWidgetItem *item_2=new QTreeWidgetItem(QStringList()<<"SPI");     //在顶层节点下添加节点
    Global_item->addChild(item_2);

    QTreeWidgetItem *childitem_1=new QTreeWidgetItem(QStringList()<<"USART0");   //在item_1节点下添加节点
    item_1->addChild(childitem_1);

    QTreeWidgetItem *childitem_2=new QTreeWidgetItem(QStringList()<<"USART1");   //在item_1节点下添加节点
    item_1->addChild(childitem_2);    
}

  树形结构构造后默认是折叠显示,那么也可以让item全部展开显示。构造树形结构成功后添加如下语句设置item全部展开:

ui->treeWidget->expandAll();   //设置item全部展开

添加图标

  在上面的代码基础上添加这条语句,可以为树形节点添加图标:

Global_item->setIcon(0, QIcon(":/new/prefix1/image/begintesting.png"));

添加checkBox

  还可以向树形结构添加checkBox:

void myMainWindow::mcu_test_case()
{
    QTreeWidgetItem *Global_item=new QTreeWidgetItem(QStringList()<<"STM32");   //顶层节点
    Global_item->setFont(0,QFont("Calibri",10,QFont::Bold));     //节点字体样式
    Global_item->setCheckState(0,Qt::PartiallyChecked);    //Qt::PartiallyChecked部分选中
    ui->treeWidget->addTopLevelItem(Global_item);      //顶层节点添加到QTreeWidget中

    QTreeWidgetItem *item_1=new QTreeWidgetItem(QStringList()<<"USART");   //在顶层节点下添加节点
    item_1->setCheckState(0,Qt::Unchecked);
    Global_item->addChild(item_1);

    QTreeWidgetItem *item_2=new QTreeWidgetItem(QStringList()<<"SPI");     //在顶层节点下添加节点
    item_2->setCheckState(0,Qt::Checked);
    Global_item->addChild(item_2);
}

  当树形结构添加checkBox后,可以自定义槽函数,实现当顶层节点选中,下面的所有子节点全选中。connect函数:

connect(ui->treeWidget,&QTreeWidget::itemClicked,this,&myMainWindow::treeWidgetClicked);

  自定义的槽函数:

void myMainWindow::treeWidgetClicked(QTreeWidgetItem *item)
{
    for (int i=0; i<item->childCount(); i++)
    {
       QTreeWidgetItem *pChildItem = item->child(i);
       pChildItem->setCheckState(0,item->checkState(0));
    }
}

QTreeWidget中添加其它控件

  QTreeWidget中还可以通过以下这个函数添加其它控件:

void QTreeWidget::setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget)

QTreeWidget信号

  QTreeWidget的信号有(截图来自Qt帮助文档):
QTreeWidget详解「建议收藏」
  拿一个比较常见的信号来举例说明,鼠标双击TreeWidgetItem,QTreeWidget发出双击信号,自定义的myMainWindow类接收后,调用自定义的槽函数。那么connect函数为:

connect(ui->treeWidget,&QTreeWidget::itemDoubleClicked,this,&myMainWindow::on_TestiItem_doubleclicked);

  由上面的图片可知,itemDoubleClicked是有参数的,回顾一下之前信号与槽讲过的知识点,槽函数可以忽略信号中多余的参数,但不允许比信号的参数多,并且槽函数存在的参数的顺序必须和信号的前面几个一致起来,那么槽函数我可以写为:

void myMainWindow::on_TestiItem_doubleclicked(QTreeWidgetItem *item)
{
    qDebug()<<item->text(0);
    qDebug()<<item->parent()->text(0);
}

  在槽函数中可以直接使用这个确定类的接口函数,我在这里做了一个对item的text和它父item的text进行打印的操作。text()中的参数为这个item的第几纵列。

点亮在看,扫码关注我吧

QTreeWidget详解「建议收藏」


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187161.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 函数对象的内部方法call(), apply(), bind()

    函数对象的内部方法call(), apply(), bind()

  • mysql workbench怎么改密码_mysql notifier

    mysql workbench怎么改密码_mysql notifier更改MySQL用户密码MySQL用户是一条记录,其中包含登录信息,帐户特权以及MySQL帐户访问和管理数据库的主机信息。登录信息包括用户名和密码。在某些情况下,需要更改MySQL数据库中的用户密码。要更改任何用户帐户的密码,必须记住以下信息:您要更改的用户帐户的详细信息。用户要更改其密码的应用程序。如果您在不更改应用程序连接字符串的情况下重置了用户帐户密码,则该应用程序将无法与数据库服务器连接。M…

  • idea导入springboot源码

    idea导入springboot源码两天啊,导入了两天没有成功啊,网上搜了超级多的教程,没有用啊。而后我让领导帮我试试,领导从github直接下载源码包,然后通过idea的open导入,然后idea就自动下载jar包,然后,然后就好了!!!我人傻了。下载的是2.2.X,因为我本地用的是maven,所以在2.2.9.release版本之后用的都是gradle构建项目的。后来发现,是我自作聪明了。原来,maven默认配置文件在C盘,我当时装的时候移到D盘,然后导入源码的时候怎么都识别不了,目前具体原因还没有找到,但是我把maven的配置

  • day2 javaee的入门知识「建议收藏」

    day2 javaee的入门知识「建议收藏」1、面向对象与面向过程的区别?面向过程的语言拥有封装、继承、多态的特性,使得整个代码灵活性高,比如Java,C++。容易维护,容易扩展。面向过程的语言直接跟内存打交道,性能要更好,比如java是需要跟虚拟机做交互,先编译解释成机器码。再跟操作系统打交道。大多数面向过程的语言基本都是直接编译成机器码在操作系统上进行执行。所以性能更好。但是java经过多年的发展,性能提升了很大,各位读者要记住javayyds!2、成员变量和局部变量的区别与c++不同的是java中没有全局变量的概念。成员变量:也称

  • 2017美赛A题论文阅读笔记

    2017美赛A题论文阅读笔记2017美赛O奖论文阅读笔记

  • 视频直播之基础原理

    视频直播之基础原理SDK(SoftwareDevelopmentKit):软件开发工具包涉及的技术:采集处理编码封包推流播放RTMP(RealTimeMessagingProtocol,实时消息传送协议),是AdobeSystems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。优点:主流CDN支持,市面上绝大多数的直播产品采用;协议简单易实现缺点:基于…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号