古人云:开卷有益;
看效果:
QTreeWidget树形实例,表格树
最近做了一个从服务里读取数据,来创建一个树形来展示。下面就给大家说一下如何创建树以及如何在树里进行各个元素的创建,如何放数据,以及如何取出树里的数据。
1:设置列的个数,名字以及一些属性
QPixmap pix_G(":/new/tri_green.png");
QPixmap pix_O(":/new/trigger.png");
ui->treeWidget->setColumnCount(8); //设置列的个数
ui->treeWidget->setColumnWidth(7,100); //设置第七列宽度为100
ui->treeWidget->header()->setStretchLastSection(false); //设置列不随着页面大小改变
QStringList listheader;
listheader<<("第一列")<<("第二列")
<<("第三列")<<("第四列")
<<("第五列")<<("第六列")
<<("第七列")<<("第八列");
ui->treeWidget->setHeaderLabels(listheader);
ui->treeWidget->header()->setDefaultAlignment(Qt::AlignCenter); //列居中显示
2:创建父节点和子节点的代码片段
//创建第一个父节点
QTreeWidgetItem *item1 = new QTreeWidgetItem(ui->treeWidget);
item1->setText(0,("球类"));
item1->setTextAlignment(0,Qt::AlignCenter);
ui->treeWidget->setItemWidget(item1,7,new QPushButton("检查"));
QTreeWidgetItem *item1_1 = new QTreeWidgetItem(item1);
item1_1->setText(1,("足球"));
item1_1->setText(2,("篮球"));
item1_1->setTextAlignment(1,Qt::AlignCenter);
item1_1->setTextAlignment(2,Qt::AlignCenter);
//创建一个Label,然后把图片放入Label中
pic = new QLabel();
pic->setPixmap(pix_G);
pic->setAlignment(Qt::AlignCenter); //居中显示图片
//把Label插入到子节点的第4列(下面同理)
ui->treeWidget->setItemWidget(item1_1,3,pic);
ui->treeWidget->setItemWidget(item1_1,7,new QPushButton("检查"));
QTreeWidgetItem *item1_2 = new QTreeWidgetItem(item1);
item1_2->setText(1,("足球"));
item1_2->setText(2,("篮球"));
item1_2->setTextAlignment(1,Qt::AlignCenter);
item1_2->setTextAlignment(2,Qt::AlignCenter);
pic = new QLabel();
pic->setPixmap(pix_O);
pic->setAlignment(Qt::AlignCenter);
ui->treeWidget->setItemWidget(item1_2,3,pic);
pic = new QLabel();
pic->setPixmap(pix_O);
pic->setAlignment(Qt::AlignCenter);
ui->treeWidget->setItemWidget(item1_2,5,pic);
ui->treeWidget->setItemWidget(item1_2,7,new QPushButton("检查"));
//创建第2个父节点
QTreeWidgetItem *item2 = new QTreeWidgetItem(ui->treeWidget);
item2->setText(0,("服装类"));
item2->setTextAlignment(0,Qt::AlignCenter);
ui->treeWidget->setItemWidget(item2,7,new QPushButton("检查"));
QTreeWidgetItem *item2_1 = new QTreeWidgetItem(item2);
item2_1->setText(1,("衬衫"));
item2_1->setText(2,("牛仔裤"));
item2_1->setTextAlignment(1,Qt::AlignCenter);
item2_1->setTextAlignment(2,Qt::AlignCenter);
pic = new QLabel();
pic->setPixmap(pix_G);
pic->setAlignment(Qt::AlignCenter);
ui->treeWidget->setItemWidget(item2_1,3,pic);
pic = new QLabel();
pic->setPixmap(pix_O);
pic->setAlignment(Qt::AlignCenter);
ui->treeWidget->setItemWidget(item2_1,5,pic);
ui->treeWidget->setItemWidget(item2_1,7,new QPushButton("检查"));
//创建第3个父节点
QTreeWidgetItem *item3 = new QTreeWidgetItem(ui->treeWidget);
item3->setText(0,("鞋类"));
item3->setTextAlignment(0,Qt::AlignCenter);
ui->treeWidget->setItemWidget(item3,7,new QPushButton("检查"));
QTreeWidgetItem *item3_1 = new QTreeWidgetItem(item3);
item3_1->setText(1,("板鞋"));
item3_1->setText(2,("皮鞋"));
item3_1->setTextAlignment(1,Qt::AlignCenter);
item3_1->setTextAlignment(2,Qt::AlignCenter);
pic = new QLabel();
pic->setPixmap(pix_G);
pic->setAlignment(Qt::AlignCenter);
ui->treeWidget->setItemWidget(item3_1,3,pic);
pic = new QLabel();
pic->setPixmap(pix_O);
pic->setAlignment(Qt::AlignCenter);
ui->treeWidget->setItemWidget(item3_1,5,pic);
ui->treeWidget->setItemWidget(item3_1,7,new QPushButton("检查"));
item1->setTextAlignment(0,Qt::AlignCenter);
ui->treeWidget->expandAll(); //把节点全部展开
//链接点击当前节点响应的信号与槽
connect(ui>treeWidget,&QTreeWidget::itemPressed,this,&treeWidgetDialog::slotItemClicked);
3:根据点击来获取对应的节点的列的名字
void treeWidgetDialog::slotItemClicked(QTreeWidgetItem *item, int column)
{
int level = item->childCount(); //获取当前节点是否有子节点
QString m_sceneName = item->text(column); //获取当前节点的名字
if(level > 0){
//循环子节点
for(int i = 0;i<level;i++){
QTreeWidgetItem *itemChild = item->child(i);
//获取子节点第二列的名字
QString childText = itemChild->text(2);
qDebug()<<childText;
}
}
}
就分享到这里了。
古人云:开卷有益