一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - Qt QTreeWidget 樹形結構實現(xiàn)代碼

Qt QTreeWidget 樹形結構實現(xiàn)代碼

2022-03-06 19:54yuanzhangmei1 C/C++

Qt中實現(xiàn)樹形結構可以使用QTreeWidget類,也可以使用QTreeView類,QTreeWidget繼承自QTreeView類,接下來通過本文給大家介紹Qt QTreeWidget 樹形結構實現(xiàn)代碼,需要的朋友可以參考下

Qt中實現(xiàn)樹形結構可以使用QTreeWidget類,也可以使用QTreeView類,QTreeWidget繼承自QTreeView類。樹形效果如下圖所示:

Qt QTreeWidget 樹形結構實現(xiàn)代碼

這是怎么實現(xiàn)的呢?還有點擊節(jié)點時會有相應的事件響應。

 

1. 樹形結構實現(xiàn)

QT GUI中有treeWidget部件,將該控件在Gui中布局好,假設其對象名為treeWidget。

QTreeWidget類官方文檔:http://qt-project.org/doc/qt-4.8/qtreewidget.html

樹形結構通過QTreeWidget類和QTreeWidgetItem類實現(xiàn),QTreeWidgetItem類實現(xiàn)結點的添加。上圖代碼實現(xiàn)如下:

ui->treeWidget->setColumnCount(1); //設置列數(shù)
ui->treeWidget->setHeaderLabel(tr("圖像選擇")); //設置頭的標題

QTreeWidgetItem *imageItem1 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("圖像1")));
imageItem1->setIcon(0,QIcon("xxx.png"));
QTreeWidgetItem *imageItem1_1 = new QTreeWidgetItem(imageItem1,QStringList(QString("Band1"))); //子節(jié)點1
imageItem1->addChild(imageItem1_1); //添加子節(jié)點

QTreeWidgetItem *imageItem2 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("圖像2")));
QTreeWidgetItem *imageItem2_1 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band1"))); //子節(jié)點1
QTreeWidgetItem *imageItem2_2 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band2"))); //子節(jié)點2
imageItem2->addChild(imageItem2_1);  //添加子節(jié)點
imageItem2->addChild(imageItem2_2);

ui->treeWidget->expandAll(); //結點全部展開

當然,還有其他的一些方法用于設置,具體需要時查查幫助文檔學習。

除了使用上面這種方法之外,還可以使用QList<QTreeWidgetItem *> & items實現(xiàn)結點的添加。QT中對C++中的STL庫中的容器使用進行了封裝,使用其封裝的類可以很方便的解決很多類似很復雜數(shù)據(jù)結構的問題。實現(xiàn)如下:

//只寫結點的實現(xiàn)
QList<QTreeWidgetItem *> rootList;

QTreeWidgetItem *imageItem1 = new QTreeWidgetItem;   //添加第一個父節(jié)點
imageItem1->setText(0,tr("圖像1"));
rootList.append(imageItem1);

QTreeWidgetItem *imageItem1_1 = new QTreeWidgetItem(imageItem1,QStringList(QString("Band1"))); //添加子節(jié)點
imageItem1->addChild(imageItem1_1);

QTreeWidgetItem *imageItem2 = new QTreeWidgetItem;   //添加第二個父節(jié)點
imageItem2->setText(0,tr("圖像2"));
rootList.append(imageItem2);

QTreeWidgetItem *imageItem2_1 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band1")));  //添加子節(jié)點
QTreeWidgetItem *imageItem2_2 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band2")));
imageItem2->addChild(imageItem2_1);
imageItem2->addChild(imageItem2_2);

ui->treeWidget->insertTopLevelItems(0,rootList);  //將結點插入部件中

ui->treeWidget->expandAll(); //全部展開

 

2. 點擊節(jié)點的事件響應

首先想到有沒有點擊某個節(jié)點的信號,查看文檔,有一個void itemClicked ( QTreeWidgetItem * item, int column )信號,是雙擊某個節(jié)點的信號,將該信號與某個自定義槽相連,當雙擊節(jié)點時觸發(fā)槽函數(shù)。

看一下這個信號,第一個參數(shù)為點擊的QTreeWidgetItem類對象,第二個參數(shù)為節(jié)點所在列號。

思路:根據(jù)點擊的QTreeWidgetItem類對象可以通過parent()函數(shù)得到父節(jié)點,如果QTreeWidgetItem類對象就是最最頂端的節(jié)點時,parent()函數(shù)返回的就是NULL。通過insertChildren ( int index, const QList<QTreeWidgetItem *> & children )函數(shù)可以得到該節(jié)點在父節(jié)點中的索引值。

目前只能解決只有一個最頂端父節(jié)點時的事件響應,當最頂端的父節(jié)點有多個(比如本文開頭有2個),這時點擊子節(jié)點時,無法判斷子節(jié)點的父節(jié)點是哪一個(本人愚笨啊!),因此沒法為其槽函數(shù)執(zhí)行相應的操作。

這里就以一個分支為例。

private slots:
    void showSelectedImage(QTreeWidgetItem * item, int column); //點擊樹節(jié)點事件

connect(ui->treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(showSelectedImage(QTreeWidgetItem*,int)));

void MainWindow::showSelectedImage(QTreeWidgetItem *item, int column)
{
    QTreeWidgetItem *parent = item->parent();
    if(NULL==parent) //注意:最頂端項是沒有父節(jié)點的,雙擊這些項時注意(陷阱)
       return;
   int col = parent->indexOfChild(item); //item在父項中的節(jié)點行號(從0開始)

   if(0==col) //Band1
   {
       //執(zhí)行對應操作
   }
   if(1==col) //Band2
   {
       //執(zhí)行對應操作
   }
}

如果不加父節(jié)點是否為空的判斷,當節(jié)點有父節(jié)點時,不會出錯,當節(jié)點沒有父節(jié)點時,程序會出錯(運行錯誤),判斷之后,雙擊沒有父節(jié)點的節(jié)點就會是樹的收縮操作。

轉載地址:http://www.cnblogs.com/Romi/archive/2012/04/16/2452709.html

到此這篇關于Qt QTreeWidget 樹形結構實現(xiàn)代碼的文章就介紹到這了,更多相關Qt QTreeWidget 樹形結構內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/yuanzhangmei1/article/details/7818591

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言實現(xiàn)電腦關機程序

    C語言實現(xiàn)電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數(shù)據(jù)都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
主站蜘蛛池模板: 久久久无码精品亚洲A片软件 | 国产综合第一页 | 日本 在线播放 | 亚洲va欧美va国产综合久久 | 午夜精品亚洲 | 高h生子双性美人受 | 国产成人亚洲精品乱码在线观看 | 欧美成人精品福利网站 | 国产欧美视频一区二区三区 | 91麻豆精东果冻天美传媒老狼 | 亚洲免费视频一区 | 日韩成本大片35分钟免费播放 | 草女人逼 | 四虎永久免费在线观看 | 从后面撕开老师的丝袜动态图 | 黄www片 | 精品香蕉99久久久久网站 | 亚洲乱人伦在线 | 欧美猛男同志同性video | 乌克兰呦12~14 | juliaann大战两个黑人 | 啊啊啊好大好爽视频 | 桥本有菜作品在线 | 久久国产影院 | 日本免费观看95视频网站 | 亚洲国产韩国欧美在线不卡 | 亚洲上最大成网人站4438 | 调教小荡娃h | 日本阿v在线播放 | 午夜DY888国产精品影院 | 午夜亚洲| 久久99国产视频 | 欧美精品一线二线大片 | 色一级| 免费视频精品一区二区三区 | 日韩操比视频 | 操碰人人 | poronovideos极度变态 | 大乳一级一区二区三区 | 亚洲swag精品自拍一区 | 亚洲经典 |