声明:网络上给出的这方面的资料较少,且都针对的是第一级节点的触发绑定事件,但是当遇到有不止一级父节点的子节点后,相关内容较少,因此通过实践整理出了以下方法,进行QTreeWidget节点触发事件的绑定,方法十分麻烦,也十分初级,希望对初学者能有所帮助。
- 在UI界面中拖入一个QTreeWidget控件;
- 利用fucInitGbxTreeBar()方法对其进行初始化(我的QTreeWidget控件是放在一个QGroupBox里面的),代码如下:
void frmMain::fucInitGbxTreeBar() { ui->treeWidget->setColumnCount(1); //设置列数 ui->treeWidget->setHeaderLabel(tr(\"工厂选择\")); //设置头的标题 QTreeWidgetItem *imageItem1 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString(\"1#工厂\"))); imageItem1->setIcon(0,QIcon(GlobalVariable::gloPathFirstLevelMenu)); QTreeWidgetItem *imageItem2 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString(\"2#工厂\"))); imageItem2->setIcon(0,QIcon(GlobalVariable::gloPathFirstLevelMenu)); QTreeWidgetItem *imageItem1_1 = new QTreeWidgetItem(imageItem1,QStringList(QString(\"1#车间\"))); imageItem1_1->setIcon(0,QIcon(GlobalVariable::gloPathSecondLevelMenu)); imageItem1->addChild(imageItem1_1); //添加子节点 QTreeWidgetItem *imageItem1_2 = new QTreeWidgetItem(imageItem1,QStringList(QString(\"2#车间\"))); imageItem1_2->setIcon(0,QIcon(GlobalVariable::gloPathSecondLevelMenu)); imageItem1->addChild(imageItem1_2); //添加子节点 QTreeWidgetItem *imageItem1_1_1 = new QTreeWidgetItem(imageItem1_1,QStringList(QString(\"1#产线\"))); imageItem1_1_1->setIcon(0,QIcon(GlobalVariable::gloPathThirdLevelMenu)); imageItem1_1->addChild(imageItem1_1_1); //添加子节点 QTreeWidgetItem *imageItem1_1_2 = new QTreeWidgetItem(imageItem1_1,QStringList(QString(\"2#产线\"))); imageItem1_1_2->setIcon(0,QIcon(GlobalVariable::gloPathThirdLevelMenu)); imageItem1_1->addChild(imageItem1_1_2); //添加子节点 QTreeWidgetItem *imageItem1_1_1_1 = new QTreeWidgetItem(imageItem1_1_1,QStringList(QString(\"1#工位\"))); imageItem1_1_1_1->setIcon(0,QIcon(GlobalVariable::gloPathFourthLevelMenu)); imageItem1_1_1->addChild(imageItem1_1_1_1); //添加子节点 QTreeWidgetItem *imageItem1_1_1_2 = new QTreeWidgetItem(imageItem1_1_1,QStringList(QString(\"2#工位\"))); imageItem1_1_1_2->setIcon(0,QIcon(GlobalVariable::gloPathFourthLevelMenu)); imageItem1_1_1->addChild(imageItem1_1_1_2); //添加子节点 connect(ui->treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(fucSlotTest1(QTreeWidgetItem*,int))); //ui->treeWidget->expandAll(); //结点全部展开 }由上述代码可以看出,共有工厂、车间、产线与工位四级,而实现的就是工位级别的双击触发事件的绑定,利用的方法是上段最后一行,即:
connect(ui->treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(fucSlotTest1(QTreeWidgetItem*,int)));
3.在connect事件中,双击信号的第一个参数即为点击的节点,第二个参数为其所在的列(由于本文的QTreeWidget只有一列,因此其固定为1),需要根据第一个参数判定其具体所在:首先判断其是否有父节点,如果没有,则是第一级工厂级,根据其text内容,即实例化时设定的“1#工厂”等内容具体判定其所在;如果有,则根据其父节点text内容及本身text内容确定具体层级,对应福CSlotTest1方法,代码如下:
void frmMain::fucSlotTest1(QTreeWidgetItem* in1,int in2)
{
if(in1->parent())
{
if(in1->parent()->text(in2)==\"1#产线\" && in1->text(in2)==\"1#工位\")
{
fucCloseGbxAllSubFrm(ui->gbxMainBar);
frmTest1 *test1=new frmTest1(ui->gbxMainBar);
test1->move(0,0);
test1->show();
}
else if(in1->parent()->text(in2)==\"1#产线\" && in1->text(in2)==\"2#工位\")
{
fucCloseGbxAllSubFrm(ui->gbxMainBar);
frmTest2 *test2=new frmTest2(ui->gbxMainBar);
test2->move(0,0);
test2->show();
}
else
{
fucCloseGbxAllSubFrm(ui->gbxMainBar);
}
}
}
(fucCloseGbxAllSubFrm方法为清除QGroupBox内的所有子页面)
总结:通过以上方法可实现对具体子节点的双击事件的绑定,同理,单击事件与其他节点事件的绑定也是如此。但是该方法较为初级,繁琐,只适用于初学者的练手所用,希望以后可以发现更好的方法
继续阅读与本文标签相同的文章
上一篇 :
云计算下的云存储系统
下一篇 :
新浪推“ADA社区”App,用户门槛较绿洲更高
-
第三讲,Ceph内部构件
2026-05-18栏目: 教程
-
日本发明AI女友,中国却发明AI主持人,这就是差距!
2026-05-18栏目: 教程
-
《华西通信》行业深度:Wi-Fi6同步5G启航,共享万物互
2026-05-18栏目: 教程
-
不用纠结NSA与SA网络!对于5G手机来说,体验基本一致
2026-05-18栏目: 教程
-
你对自己的网站拥有所有权吗?
2026-05-18栏目: 教程
