QTreeWidget創建


  QTreeWidget。顧名思義,這個類用來展示樹型結構。同前面說的QListWidget類似,這個類需要同另外一個輔助類QTreeWidgetItem一同使用。不過,既然是提供方面的封裝類,即便是看上去很復雜的樹,在使用這個類的時候也是顯得比較簡單的。當不需要使用復雜的QTreeView的特性的時候,我們可以直接使用QTreeWidget代替。
 
下面來看代碼。
 
treewidget.h
#ifndef TREEWIDGET_H 
#define TREEWIDGET_H 
 
#include <QtGui> 
 
class TreeWidget :  public QWidget 

public
        TreeWidget(); 
 
private
        QTreeWidget *tree; 
}; 
 
#endif  // TREEWIDGET_H
 
treewidget.cpp
#include  "treewidget.h" 
 
TreeWidget::TreeWidget() 

        tree =  new QTreeWidget( this); 
        tree->setColumnCount(1); 
        QTreeWidgetItem *root =  new QTreeWidgetItem(tree, QStringList(QString( "Root"))); 
        QTreeWidgetItem *leaf =  new QTreeWidgetItem(root, QStringList(QString( "Leaf 1"))); 
        root->addChild(leaf); 
        QTreeWidgetItem *leaf2 =  new QTreeWidgetItem(root, QStringList(QString( "Leaf 1"))); 
        leaf2->setCheckState(0, Qt::Checked); 
        root->addChild(leaf2); 
        QList<QTreeWidgetItem *> rootList; 
        rootList << root; 
        tree->insertTopLevelItems(0, rootList); 
 
首先,我們在構造函數里面創建了一個QTreeWidget的實例。然后我們調用setColumnCount()函數設定欄數。這個函數的效果我們以后再看。然后我們要向QTreeWidget添加QTreeWidgetItem。QTreeWidgetItem有九個重載的構造函數。我們在這里只是來看看其中的一個,其余的請自行查閱API文檔。這個構造函數的簽名如下:
 
QTreeWidgetItem::QTreeWidgetItem ( QTreeWidget * parent,  const QStringList & strings,  int type = Type );
 
這里有3個參數,第一個參數用於指定這個item屬於哪一個樹;第二個參數是指定這個item顯示的文字;第三個參數用於指定這個item的類型。Type有兩個可行的取值:QTreeWidgetItem::Type和QTreeWidgetItem::UserType,由於我們並沒有定義用戶類型,所以只使用其默認值即可。這里你會奇怪,第二個參數為什么是一個QStringList類型的,而不是QString類型的?我們先不去管它,繼續下面的代碼。
 
后面我們又創建了一個QTreeWidgetItem,注意它的第一個參數不是QTreeWidget而是QTreeWidgetItem類型的,這就把它的父節點設置為前面我們定義的root了。然后我們使用了setCheckState()函數,讓它變得可以選擇,最后使用addChild()函數把它添加進來。
 
最后一步,我們創建了一個QList類型,前面的root添加進去,然后insert到top items。這里可以想象到,由於這個樹組件可以由多個根組成(嚴格來說這已經不是樹了,不過姑且還是叫樹吧),所以我們傳進來的是一個list。
 
好了,編譯運行一下我們的代碼吧!
 
 
樣子同我們想象的基本一致,只是這個樹的頭上怎么會有一個1?還記得我們跳過去的那個函數嗎?下面我們修改一下代碼看看:
 
#include  "listwidget.h" 
 
TreeWidget::TreeWidget() 

        tree =  new QTreeWidget( this); 
        tree->setColumnCount(2); 
        QStringList headers; 
        headers <<  "Name" <<  "Number"
        tree->setHeaderLabels(headers); 
        QStringList rootTextList; 
        rootTextList <<  "Root" <<  "0"
        QTreeWidgetItem *root =  new QTreeWidgetItem(tree, rootTextList); 
        QStringList leafTextList; 
        leafTextList <<  "Leaf 1" <<  "1"
        QTreeWidgetItem *leaf =  new QTreeWidgetItem(root, leafTextList); 
        root->addChild(leaf); 
        QStringList leaf2TextList; 
        leaf2TextList <<  "Leaf 2" <<  "2"
        QTreeWidgetItem *leaf2 =  new QTreeWidgetItem(root, leaf2TextList); 
        leaf2->setCheckState(0, Qt::Checked); 
        root->addChild(leaf2); 
        QList<QTreeWidgetItem *> rootList; 
        rootList << root; 
        tree->insertTopLevelItems(0, rootList); 
}
 
我們把columnCount設為2,然后傳入的QStringList對應的有2個元素。這樣再來運行一下:
 
 
原來這個columnCount就是用於在列表中顯示樹的!這樣,你就可以很容易的將樹和列表結合在一起,從而實現類似Windows資源管理器的界面。當然,如果你不需要顯示這個header,可以調用setHeaderHidden()函數將這個功能隱藏掉。
 
轉自:http://devbean.blog.51cto.com/448512/262296/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM