Qt5學習筆記(4)——樹形控件QtreeWidget(續)

QTreeWidget顧名思義,這是用來展現樹型結構(也就是層次結構)的。Qt中實現樹形結構可使用QTreeWidget類,也可使QTreeView類,QTreeWidget繼承自QTreeView類。這個類須要同另一個輔助類QTreeWidgetItem一同使用。不過,既然是提供方面的封裝類,即使是看上去很複雜的樹,在使用這個類的時候也是顯得比較簡單的。當不須要使用複雜的QTreeView的特性的時候,咱們能夠直接使用QTreeWidget代替。


QTreeView是一個視圖類,須要手動給其指定模型類,纔可以顯示數據。
QTreewidget是提供了一個默認模型的部件,比較方便。
就靈活性來說,QTreeView要靈活些。
其中的QtreeWidgetItem就是一層層的添加的,其實仍是不太方便的。


在應用程序中通常不是這樣來建立QTreeView的,特別是比較複雜的Tree,通常都是經過QTreeView來實現而不是QTreeWidget來實現的。

下面是QTreewidget的繼承關係圖:


下面是我寫的代碼:

    ui->treeWidget->setColumnCount(1); //設置列數
    ui->treeWidget->setHeaderLabel(tr("構件選擇")); //設置頭的標題
    ui->treeWidget->setHeaderHidden(true);//隱藏表頭
    QPalette p(ui->treeWidget->palette());//設置背景色
    p.setColor(QPalette::Base, QColor("#ced9e6"));
    ui->treeWidget->setPalette(p);
    QTreeWidgetItem *imageItem1 = new QTreeWidgetItem(ui->treeWidget,QStringList(QString("主構件")));
    imageItem1->setBackgroundColor(0,QColor("#e5ebf4"));//設置背景顏色
    QTreeWidgetItem *imageItem1_1 = new QTreeWidgetItem(imageItem1,QStringList(QString("鋼柱"))); //子節點1
    QTreeWidgetItem *imageItem1_2 = new QTreeWidgetItem(imageItem1,QStringList(QString("鋼樑"))); //子節點2
    QTreeWidgetItem *imageItem1_3 = new QTreeWidgetItem(imageItem1,QStringList(QString("吊車梁"))); //子節點3
    QTreeWidgetItem *imageItem1_4 = new QTreeWidgetItem(imageItem1,QStringList(QString("衍架"))); //子節點4
    QTreeWidgetItem *imageItem1_5 = new QTreeWidgetItem(imageItem1,QStringList(QString("格構柱"))); //子節點5
    imageItem1_1->setForeground(0,QBrush(QColor("#546892")));//設置文字顏色
    imageItem1_2->setForeground(0,QBrush(QColor("#546892")));
    imageItem1_3->setForeground(0,QBrush(QColor("#546892")));
    imageItem1_4->setForeground(0,QBrush(QColor("#546892")));
    imageItem1_5->setForeground(0,QBrush(QColor("#546892")));
    imageItem1_1->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));//設置圖標
    imageItem1_2->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));
    imageItem1_3->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));
    imageItem1_4->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));
    imageItem1_5->setIcon(0,QIcon(":/new/prefix1/img/images/1.png"));
    imageItem1->addChild(imageItem1_1); //添加子節點
    imageItem1->addChild(imageItem1_2);
    imageItem1->addChild(imageItem1_3);
    imageItem1->addChild(imageItem1_4);
    imageItem1->addChild(imageItem1_5);
    ui->treeWidget->expandAll(); //結點所有展開

在編程的過程當中還遇到一個問題,就是我想把根節點前系統默認的黑色小三角形(也多是減號)換成本身電腦上的外部路徑的圖片,剛開始直接用setIcon()函數但是出來的效果是我自定義的圖片跟在默認的黑色小三角形後面,並無替換,研究了一天終於找到方法:先不顯示根節點的默認圖標,而後添加本身的圖標就能夠了。代碼以下:

ui->treeWidget->setRootIsDecorated(false);//隱藏根節點前面的小箭頭
//
//
//
//
imageItem1->setIcon(0,QIcon(":/new/prefix1/img/images/jianhao.png"));//設置圖標

這樣就完美的解決了問題。

相關文章
相關標籤/搜索