在treewidget中加入控件_Qt5学习笔记(4)——树形控件QtreeWidget(续)

本文介绍了如何在Qt5中使用QTreeWidget创建树形结构,并添加自定义的图标和颜色。通过设置列数、隐藏表头、更改背景色以及设置QTreeWidgetItem的子节点和图标,实现了主构件下包含多个子构件的展示。同时,解决了根节点默认图标替换的问题,通过设置rootIsDecorated为false并添加自定义图标,成功将系统默认图标替换为自定义图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QTreeWidget顾名思义,这是用来展示树型结构(也就是层次结构)的。Qt中实现树形结构可以使用QTreeWidget类,也可以使QTreeView类,QTreeWidget继承自QTreeView类。这个类需要同另外一个辅助类QTreeWidgetItem一同使用。不过,既然是提供方面的封装类,即便是看上去很复杂的树,在使用这个类的时候也是显得比较简单的。当不需要使用复杂的QTreeView的特性的时候,我们可以直接使用QTreeWidget代替。

QTreeView是一个视图类,需要手动给其指定模型类,才能够显示数据。

QTreewidget是提供了一个默认模型的部件,比较方便。

就灵活性来讲,QTreeView要灵活些。

其中的QtreeWidgetItem就是一层层的添加的,其实还是不太方便的。

在应用程序中一般不是这样来创建QTreeView的,特别是比较复杂的Tree,一般都是通过QTreeView来实现而不是QTreeWidget来实现的。

下面是QTreewidget的继承关系图:

下面是我写的代码:

ui->treeWidget->setColumnCount(1); //设置列数

ui->treeWidget->setHeaderLabel(tr("构件选择")); //设置头的标题

ui->treeWidget->setHeaderHidden(true);//隐藏表头

QPalette p(ui->treeWidget->palette());//设置背景色

p.setColor(QPalette::Base, QColor("#ced9e6"));

ui->treeWidget->setPalette(p);

QTreeWidgetItem *imageItem1 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("主构件")));

imageItem1->setBackgroundColor(0,QColor("#e5ebf4"));//设置背景颜色

QTreeWidgetItem *imageItem1_1 = new QTreeWidgetItem(imageItem1,QStringList(QString("钢柱"))); //子节点1

QTreeWidgetItem *imageItem1_2 = new QTreeWidgetItem(imageItem1,QStringList(QString("钢梁"))); //子节点2

QTreeWidgetItem *imageItem1_3 = new QTreeWidgetItem(imageItem1,QStringList(QString("吊车梁"))); //子节点3

QTreeWidgetItem *imageItem1_4 = new QTreeWidgetItem(imageItem1,QStringList(QString("衍架"))); //子节点4

QTreeWidgetItem *imageItem1_5 = new QTreeWidgetItem(imageItem1,QStringList(QString("格构柱"))); //子节点5

imageItem1_1->setForeground(0,QBrush(QColor("#546892")));//设置文字颜色

imageItem1_2->setForeground(0,QBrush(QColor("#546892")));

imageItem1_3->setForeground(0,QBrush(QColor("#546892")));

imageItem1_4->setForeground(0,QBrush(QColor("#546892")));

imageItem1_5->setForeground(0,QBrush(QColor("#546892")));

imageItem1_1->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));//设置图标

imageItem1_2->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));

imageItem1_3->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));

imageItem1_4->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));

imageItem1_5->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));

imageItem1->addChild(imageItem1_1); //添加子节点

imageItem1->addChild(imageItem1_2);

imageItem1->addChild(imageItem1_3);

imageItem1->addChild(imageItem1_4);

imageItem1->addChild(imageItem1_5);

ui->treeWidget->expandAll(); //结点全部展开

在编程的过程中还遇到一个问题,就是我想把根节点前系统默认的黑色小三角形(也可能是减号)换成自己电脑上的外部路径的图片,刚开始直接用setIcon()函数可是出来的效果是我自定义的图片跟在默认的黑色小三角形后面,并没有替换,研究了一天终于找到方法:先不显示根节点的默认图标,然后添加自己的图标就可以了。代码如下:

ui->treeWidget->setRootIsDecorated(false);//隐藏根节点前面的小箭头

//

//

//

//

imageItem1->setIcon(0,QIcon(":/new/prefix1/img/images/jianhao.png"));//设置图标

这样就完美的解决了问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值