MVC是一種與用戶界面相關的設計模式。經過使用此模型,能夠有效地分離數據和用戶界面。MVC設計模式包含三要素:表示數據的模型(Model)、表示用戶界面的視圖(View)和定義了用戶在界面上的操做控制(Controller)。設計模式
Qt的設計了一種與MVC相似的設計模式:使用模型/視圖結構完成數據和界面的分離,即InterView框架。Qt的InterView框架把視圖和控制部件結合在一塊兒,使得框架更爲簡潔。Qt引入了代理(delegate)更靈活的處理用戶的輸入,可以自定義數據條目(item)的顯示和編輯方式。瀏覽器
Qt的模型/視圖結構分爲三個部分:模型、視圖、代理。模型與數據源通訊併爲其餘部件提供接口;視圖從模型中得到用來引用數據條目的條目索引;在視圖中,代理負責繪製數據條目。編輯條目時,代理和模型直接通訊;各個部件之間使用信號和槽的方式進行通訊。框架
使用模型/視圖結構實現一個簡單的小案例:文件瀏覽器函數
#include "mainwindow.h" #include <QApplication> #include <QSplitter> #include <QFileSystemModel> #include <QTreeView> #include <QListView> #include <QVBoxLayout> #include <QDir> #include <QDirModel> #include <QTableView> int main(int argc, char *argv[]) { QApplication a(argc, argv); // QDirModel類繼承自QAbstractItemModel類,爲訪問本地文件系統提供數據模型,它提供了與文件操做相關的函數 QDirModel model; // 新建三種不一樣的View對象,以便文件對象能夠以三種不一樣方式顯示 QTreeView tree; QListView list; QTableView table; tree.setModel(&model); list.setModel(&model); table.setModel(&model); // 設置treeView對象的選擇方式爲多選 //tree.setSelectionMode(QAbstractItemView::MultiSelection); //list.setSelectionModel(tree.selectionModel()); //table.setSelectionModel(tree.selectionModel()); // 實現雙擊對象中某個項目時,QListView和QTableView對象顯示選定目錄下的文件和目錄 QObject::connect(&tree, SIGNAL(doubleClicked(QModelIndex)), &list, SLOT(setRootIndex(QModelIndex))); QObject::connect(&tree, SIGNAL(doubleClicked(QModelIndex)), &table, SLOT(setRootIndex(QModelIndex))); QSplitter *splitter = new QSplitter; splitter->addWidget(&tree); splitter->addWidget(&list); splitter->addWidget(&table); splitter->setWindowTitle(QObject::tr("InterView")); splitter->resize(1500, 600); splitter->show(); return a.exec(); }
--------------------- spa
做者:沾糖的柿子
來源:CSDN
原文:https://blog.csdn.net/m0_37897437/article/details/77747871
版權聲明:本文爲博主原創文章,轉載請附上博文連接!.net