日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT的QTreeWidget节点触发事件(一)

發布時間:2023/12/20 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT的QTreeWidget节点触发事件(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲明:網絡上給出的這方面的資料較少,且都針對的是第一級節點的觸發綁定事件,但是當遇到有不止一級父節點的子節點后,相關內容較少,因此通過實踐整理出了以下方法,進行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內容確定具體層級,對應fucSlotTest1方法,代碼如下:

    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內的所有子頁面)

    總結:通過以上方法可實現對具體子節點的雙擊事件的綁定,同理,單擊事件與其他節點事件的綁定也是如此。但是該方法較為初級,繁瑣,只適用于初學者的練手所用,希望以后可以發現更好的方法

    總結

    以上是生活随笔為你收集整理的QT的QTreeWidget节点触发事件(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。