需要 #include <QTreeWidget> #include <QTreeWidgetItem>
#include "win.h" #include <QDebug> #include <QPushButton> Win::Win(QWidget *parent) : QWidget(parent) { this->resize(500,400); QPushButton* btn=new QPushButton("按钮",this); btn->move(400,350); connect(btn,&QPushButton::clicked,this,&Win::A); tw=new QTreeWidget(this); // 创建一个树形控件 tw->move(10,10); tw->setColumnCount(2); //设置列数 tw->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍"); //设置头部标签 QTreeWidgetItem* twi=new QTreeWidgetItem(QStringList()<<"力量"); //创建项目 tw->addTopLevelItem(twi); //添加一个顶层项目 QTreeWidgetItem* twi1=new QTreeWidgetItem(QStringList()<<"敏捷"); tw->addTopLevelItem(twi1); QTreeWidgetItem* twi2=new QTreeWidgetItem(QStringList()<<"智力"); tw->insertTopLevelItem(0,twi2); //插入顶层项目 //参数1 索引号 twi2->setCheckState(0,Qt::PartiallyChecked); // 给项目设置复选框 //参数1 复选框的位置 列序号 //Qt::Unchecked 没选中 //Qt::Checked 选中 //Qt::PartiallyChecked 部分选中 QTreeWidgetItem* li1=new QTreeWidgetItem(QStringList()<<"钢珠"<<"前排坦克,能吸引伤害"); QTreeWidgetItem* li3=new QTreeWidgetItem(QStringList()<<"铁柱"<<"后排坦克,能吸引伤害"); twi->addChild(li1) ;//给项目添加子项 twi->addChild(li3); connect(tw,&QTreeWidget::itemClicked,this,&Win::B); //单击项目触发的信号 //这个信号会自动传递两个参数:参数1就是被单击的项目指针;参数2就是单击的列序号 connect(tw,&QTreeWidget::itemDoubleClicked,this,&Win::C); //双击项目触发的信号 //这个信号会自动传递两个参数:参数1就是被单击的项目指针;参数2就是单击的列序号 connect(tw,&QTreeWidget::currentItemChanged,this,&Win::D); //当前项目变化时触发信号 //这个信号会自动传递两个参数:参数1就是当前项目指针;参数2就是前一项目指针 tw->expandAll();//让所有的项都是以打开状态显示的 //注意必须要在所有项都已经实例化好之后再调用该方法,如果一开始就调用则会没有效果 } void Win::D(QTreeWidgetItem *current, QTreeWidgetItem *previous){ qDebug()<<"当前项目变化了:"<<current<<previous; } void Win::C(QTreeWidgetItem *item, int column){ qDebug()<<"双击了项目:"<<item<<column; } void Win::B(QTreeWidgetItem *item, int column){ qDebug()<<"单击了项目:"<<item<<column; QTreeWidgetItem* pi=item->parent(); //返回指定项目的父项目指针 //顶层项目的指针是0x0--NULL //int col = pi->indexOfChild(item); //item在父项中的行号(从0开始) //【注意:item不能是顶层项目--否则崩溃】 QTreeWidgetItem* curItem=tw->currentItem(); //获取当前项目指针 QString str=curItem->text(1); //返回项目指定列的文本--参数项目的列序号 qDebug()<<str; } Win::~Win() { } void Win::A(){ }