Qt學習之路_9(Qt中Item Widget初步探索)

Qt學習之路_9(Qt中Item Widget初步探索)

         Qt界面設計中有model-based的List View,有Item-based的List Widget,關於這2者到底有什麼區別,暫時也沒弄太明白,這些都是界面設計中的設計模式,從MVC發展而來。以後用到的時候自然會明白的。

         一般簡單的都是用Item-based的List Widget,Qt中給出了List Widget,Tree Widget,Tabel Widget三種,這裏就簡單瞭解一下List Widget和Tree Widget的使用。Tabel Widget的使用應該也類似。

 

         List Widget的使用

         List Widget的使用比較簡單,加入數據時直接用addItem()函數。讀取數據時採用currentItem->text()方法,本次實驗先向List Widget中寫入一些內容,然後單擊button按鈕時,以消息box的形式將選擇行的內容顯示出來。

         實驗的效果如下:

    

 

實驗代碼及註釋如下:

#include "dialog.h"
#include "ui_dialog.h"
#include <QtCore>
#include <QtGui>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    //向listWdget中寫入數據
    for (int i = 10; i > 0; i--)
        {
           ui->listWidget->addItem("hello "+QString::number(i));
           ui->listWidget->addItem("world"+QString::number(i));
    }
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    //將數據讀取出來並以消息box的形式顯示出來。
    QMessageBox::information(this, "clicked", ui->listWidget->currentItem()->text());
}

 

         Tree Widget的使用

         Tree Wdiget中各個item是有層次關係的,也就是要區分父item和子item。這次實驗是參考youtube中C++ Qt教程。完成的功能是在窗體的構造函數中新建幾個item,包含了父item和子item,選中其中的一個item然後單擊後會更改item裏面文本的顏色。因此包含了Tree Widget的設置和讀取2種簡單的操作。

         效果如下:

    

 

程序代碼和註釋如下:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QtGui>

#include <QtCore>

 

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

 

    //設置TreeWidget的列數

    ui->treeWidget->setColumnCount(2);

    //給每一列設置標籤

    ui->treeWidget->setHeaderLabels(QStringList() << "number" << "good");

    addroot("one","very good");

    addroot("two", "very good");

    addroot("three", "very_good");

 

}

 

MainWindow::~MainWindow()

{

    delete ui;

}

 

void MainWindow::addroot(QString name, QString description)

{

    //從TreeWidget中構造出1個QTreeWidgetItem.

    QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget);

    //向2列加入內容

    item->setText(0, name);

    item->setText(1, description);

    //將該條目置頂,好像是置於下一個條目的底部

    ui->treeWidget->addTopLevelItem(item);

    //增加子條目

    addchild(item, "here1", "very good1");

    addchild(item, "here2", "very good2");

    addchild(item, "here3", "very good3");

}

 

void MainWindow::addchild(QTreeWidgetItem *parent, QString name, QString dscription)

{

    //這裏QTreeWidgetItem構造函數時是不需要參數的,因爲它被建立後就加載到parent上了

    QTreeWidgetItem *item = new QTreeWidgetItem();

    item->setText(0, name);

    item->setText(1, dscription);

    parent->addChild(item);

}

 

void MainWindow::on_pushButton_clicked()

{

    //如果是設置改變文字的顏色的話,那麼當按鈕按下後,需要把item中的條目焦點移開才能看到效果

//    ui->treeWidget->currentItem()->setTextColor(0, Qt::green);

//    ui->treeWidget->currentItem()->setTextColor(1, Qt::red);

    //改變文本背景的顏色也是一樣的效果

    ui->treeWidget->currentItem()->setBackgroundColor(0, Qt::green);

    ui->treeWidget->currentItem()->setBackgroundColor(1, Qt::red);

 

}

 

  總結:Item Widget在實際應用中比較廣泛,其中Qt中的使用也很方便,可以將各種Item widget組合起來用。

 

 

 

 

 

 

作者:tornadomeet 出處:http://www.cnblogs.com/tornadomeet 歡迎轉載或分享,但請務必聲明文章出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章