大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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帮助文档):
拿一个比较常见的信号来举例说明,鼠标双击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的第几纵列。
点亮在看,扫码关注我吧
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187161.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...