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組合起來用。