程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Qt學習之路(40): QTreeWidget

Qt學習之路(40): QTreeWidget

編輯:關於C語言

前段時間筆記本壞掉了,一直沒有更新博客,現在終於修好了啊,還是來繼續《Qt學習之路》這個系列吧!   接著前面的內容,今天要說的是另外一個item view class,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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved