Qt 模型视图编程的简单实例
導(dǎo)言:
當(dāng)遇到一個(gè)相對(duì)復(fù)雜的項(xiàng)目軟件的時(shí)候,處理的數(shù)據(jù)量相對(duì)較大,這時(shí)候從軟件設(shè)計(jì)的角度,一般都會(huì)考慮運(yùn)用模型視圖的架構(gòu)。
Qt關(guān)于MVC編程組成部分:
大體上,模型、視圖架構(gòu)中眾多類(lèi)可以分為3組:模型、視圖和委托。它們之間使用信號(hào)和槽來(lái)實(shí)現(xiàn)通信。
1 模型
所有的模型都基于QAbstractItemModel為數(shù)據(jù)提供了一個(gè)十分靈活的接口來(lái)處理各種視圖,這些視圖可以將數(shù)據(jù)表現(xiàn)為表格(table)、列表(list)和樹(shù)(tree)等形式。
QAbstractListModel 和QAbstractTableModel類(lèi),提供了一些常見(jiàn)的功能。
Qt提供了一些現(xiàn)成的模型來(lái)處理數(shù)據(jù)項(xiàng):
QStringListModel 用來(lái)存儲(chǔ)簡(jiǎn)單的QString項(xiàng)目列表;
QStandardItemModel管理復(fù)雜的樹(shù)形結(jié)構(gòu)數(shù)據(jù)項(xiàng),每一個(gè)數(shù)據(jù)項(xiàng)可以包含任意的數(shù)據(jù);
QFileSystemModel提供了本地文件系統(tǒng)和目錄的信息;
QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。
如果Qt提供的這些標(biāo)準(zhǔn)的模型無(wú)法滿(mǎn)足需要,還可以子類(lèi)QAbstractItemModel、QAbstractListModel 或者QAbstractTableModel來(lái)創(chuàng)建自定義的模型。
2 視圖
Qt 提供了幾種不同類(lèi)型的視圖,
-
QListView將數(shù)據(jù)項(xiàng)顯示為一個(gè)列表;
QTableView將模型中的數(shù)據(jù)顯示在一個(gè)表格中;
QTreeView將模型的數(shù)據(jù)項(xiàng)顯示在 具有層次的列表中。
以上這些類(lèi)都是基于QAbstractItemView抽象基類(lèi)的。
3委托
默認(rèn)的委托實(shí)現(xiàn)由QStyledItemDelegate類(lèi)提供。
一個(gè)簡(jiǎn)單的例子:使用樹(shù)形和列表兩種視圖來(lái)顯示同一個(gè)模型的數(shù)據(jù)
#include <QApplication> #include <QFileSystemModel> #include <QTreeView> #include <QListView>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創(chuàng)建文件系統(tǒng)模型QFileSystemModel model;// 指定要監(jiān)視的目錄model.setRootPath(QDir::currentPath());// 創(chuàng)建樹(shù)型視圖QTreeView tree;// 為視圖指定模型tree.setModel(&model);// 指定根索引tree.setRootIndex(model.index(QDir::currentPath()));// 創(chuàng)建列表視圖QListView list;list.setModel(&model);list.setRootIndex(model.index(QDir::currentPath()));tree.show();list.show();return app.exec(); }輸出:
ps:
有關(guān)編程的學(xué)習(xí),編程的理論框架必須要建立起來(lái),同時(shí)需要一定量的實(shí)例,這樣才能融會(huì)貫通。
總結(jié)
以上是生活随笔為你收集整理的Qt 模型视图编程的简单实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QT 定时器与动画实现
- 下一篇: Qt5 中 关于Widget Mappe