Qt 模型视图编程的简单实例
導言:
當遇到一個相對復雜的項目軟件的時候,處理的數(shù)據(jù)量相對較大,這時候從軟件設計的角度,一般都會考慮運用模型視圖的架構。
Qt關于MVC編程組成部分:
大體上,模型、視圖架構中眾多類可以分為3組:模型、視圖和委托。它們之間使用信號和槽來實現(xiàn)通信。
1 模型
所有的模型都基于QAbstractItemModel為數(shù)據(jù)提供了一個十分靈活的接口來處理各種視圖,這些視圖可以將數(shù)據(jù)表現(xiàn)為表格(table)、列表(list)和樹(tree)等形式。
QAbstractListModel 和QAbstractTableModel類,提供了一些常見的功能。
Qt提供了一些現(xiàn)成的模型來處理數(shù)據(jù)項:
QStringListModel 用來存儲簡單的QString項目列表;
QStandardItemModel管理復雜的樹形結構數(shù)據(jù)項,每一個數(shù)據(jù)項可以包含任意的數(shù)據(jù);
QFileSystemModel提供了本地文件系統(tǒng)和目錄的信息;
QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel用來訪問數(shù)據(jù)庫。
如果Qt提供的這些標準的模型無法滿足需要,還可以子類QAbstractItemModel、QAbstractListModel 或者QAbstractTableModel來創(chuàng)建自定義的模型。
2 視圖
Qt 提供了幾種不同類型的視圖,
-
QListView將數(shù)據(jù)項顯示為一個列表;
QTableView將模型中的數(shù)據(jù)顯示在一個表格中;
QTreeView將模型的數(shù)據(jù)項顯示在 具有層次的列表中。
以上這些類都是基于QAbstractItemView抽象基類的。
3委托
默認的委托實現(xiàn)由QStyledItemDelegate類提供。
一個簡單的例子:使用樹形和列表兩種視圖來顯示同一個模型的數(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)建樹型視圖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:
有關編程的學習,編程的理論框架必須要建立起來,同時需要一定量的實例,這樣才能融會貫通。
總結
以上是生活随笔為你收集整理的Qt 模型视图编程的简单实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT 定时器与动画实现
- 下一篇: Qt5 中 关于Widget Mappe