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

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

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

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

Qt QTreeWidget 樹形結構實現代碼

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

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

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

Qt QTreeWidget 樹形結構實現代碼

這是怎么實現的呢?還有點擊節點時會有相應的事件響應。

 

1. 樹形結構實現

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

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

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

ui->treeWidget->setColumnCount(1); //設置列數
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"))); //子節點1
imageItem1->addChild(imageItem1_1); //添加子節點

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

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

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

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

//只寫結點的實現
QList<QTreeWidgetItem *> rootList;

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

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

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

QTreeWidgetItem *imageItem2_1 = new QTreeWidgetItem(imageItem2,QStringList(QString("Band1")));  //添加子節點
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. 點擊節點的事件響應

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

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

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

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

這里就以一個分支為例。

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

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) //注意:最頂端項是沒有父節點的,雙擊這些項時注意(陷阱)
       return;
   int col = parent->indexOfChild(item); //item在父項中的節點行號(從0開始)

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

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

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

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

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

延伸 · 閱讀

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

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

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

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

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

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

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

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

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

    深入理解goto語句的替代實現方式分析

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

    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++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

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

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

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

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

    針眼_6702022-01-24
主站蜘蛛池模板: 4438全国免费观看 | 婷婷久久热99在线精品 | 胸大的姑娘中文字幕视频 | 五月香婷婷 | 国产精品猎奇系列在线观看 | pregnanthd产子| 公妇仑乱在线观看 | 超兴奋朋友的中文字幕下 | 国产精品成 | 国产嫩草视频 | 日剧整部剧护妻狂魔免费观看全集 | 欧美作爱福利免费观看视频 | 亚洲国产精品成 | 四虎影院网址大全 | 国产精品久久久久久久免费大片 | www.一区| 继攵催眠女乱h调教 | 青青草原国产视频 | 秋霞在线观看成人高清视频51 | 国产成人精品男人的天堂538 | 好看的亚洲视频 | 9420高清视频在线观看网百度 | 亚洲日本在线观看网址 | 色婷婷六月丁香在线观看 | 2021国产麻豆剧传媒剧情动漫 | 国产亚洲欧美成人久久片 | 久久全国免费久久青青小草 | 国产卡一卡二卡3卡乱码免费 | 涩色爱 | 俺去俺去啦最新官网在线 | 国产精彩对白综合视频 | 出轨同学会免费观看 | 天天综合色天天综合 | 国产自拍啪啪 | 任我行视频在线观看国语 | 性欧美sexvideo另类 | 高清黄色直接看 | 亚洲高清在线视频 | 免费日韩 | 天莱男模gary | 日韩一级片在线观看 |