MVC全稱是 Model View Controller,是一種非常非常流行的架構(gòu)模式,相關MVC具體的,網(wǎng)上已經(jīng)非常非常詳盡了,不贅述了。
在青州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設計 網(wǎng)站設計制作按需定制開發(fā),公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,營銷型網(wǎng)站,外貿(mào)網(wǎng)站建設,青州網(wǎng)站建設費用合理。關于Qt中的MVC
其實Qt中的MVC并不叫MVC,而是叫“MVD”,Qt中沒有Controller的說法,而是使用了另外一種抽象: Delegate (委托) ,其行為和傳統(tǒng)的MVC是相同的。寫過C#的同學肯定對delegate就不陌生了,這里delegate的用法就是負責協(xié)調(diào)Model和View之間的數(shù)據(jù)。其思想如下圖所示:
Model是唯一和數(shù)據(jù)集打交道的組件,View不接觸數(shù)據(jù)源,其所需要的數(shù)據(jù)可以從Model中取出,而Delegate正式負責協(xié)調(diào)Model和View上數(shù)據(jù)。這種將view和數(shù)據(jù)源隔離的方式有幾點好處:
1、在處理較大的數(shù)據(jù)集時每個組件各司其職,不至于降低性能。
2、一個Model可以映射到多個View,這樣可以以不同的方式查看數(shù)據(jù)同一份數(shù)據(jù)。
3、如果底層數(shù)據(jù)源的存儲改變了,我們只需要處理Model就可以了。
舉個具體的例子:
假設如圖所示的Data代表一個學校的期末成績的數(shù)據(jù)源,Model獲取了其中計算機學院的所有學生的成績,而軟件的界面上我們有多個View用于顯示不同專業(yè)學生成績的詳細,我們只需要從Model中篩選出所需的數(shù)據(jù),而篩選的工作正是交給Delegate來做的。
使用Qt預定義組件
Qt為我們預定義了豐富組件類,通常情況下使用這些類就能實現(xiàn)比較好看的視圖了。這個例子里我們正式使用QTableView和QStandardItemModel,Delegate在這里不需要關注,默認的Delegate就可以很好的協(xié)調(diào)Model和View了。 考慮篇幅,我做一個比較小的視圖,就不考慮外部的數(shù)據(jù)源了,數(shù)據(jù)都是我手動添加的 ,在一個Widget類中我們分別定義一個QTableView和一個QStandardItemModel,其結(jié)構(gòu)大致是這樣的:
class demo : public QWidget { Q_OBJECT public: demo(QWidget *parent = 0); ~demo(); private: Ui::demoClass ui; QStandardItemModel* mModel; };
ui成員是Qt Designer生成的類,我們的QTableView的對象就在其中(QTableView我直接拖拽上去的,為了節(jié)約時間,呵呵),之后再demo的構(gòu)造函數(shù)中我們使用setModel函數(shù)就可以把Model和view進行綁定:
demo::demo(QWidget *parent) : QWidget(parent), mModel(new QStandardItemModel()) { ui.setupUi(this); mModel->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("Name"))); mModel->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("Type"))); mModel->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Size"))); mModel->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("Time"))); QList<QStandardItem *> item; item.append(new QStandardItem(QObject::tr("Qt.css"))); item.append(new QStandardItem(QObject::tr("css"))); item.append(new QStandardItem(QObject::tr("100KB"))); item.append(new QStandardItem(QObject::tr("2016-1-10"))); mModel->appendRow(item); ...... ui.mView->setModel(mModel); }
一些重復的添加數(shù)據(jù)的工作,我就沒有貼出來,這段代碼基本上沒有接觸過Qt的人也能很好的理解,很直觀是吧。首先在mModel中設置后表頭然后添加數(shù)據(jù),到最后調(diào)用setModel()函數(shù)綁定M/V,之后Delegate就默默地后臺工作,幫我們完成View的繪制,其效果圖:
當然界面我用qss做了一些美化的工作,感興趣的朋友可以點擊 這里 下載到這個demo的源碼。
上面例子的不足之處
也許上述的例子已經(jīng)能滿足你的日常需要,但是仍有瑕疵,一個“炫酷”的界面應該具備以下幾點 比如1、Name列 要能顯示文件類型的ICON ,2 、日期編輯的時候不是允許輸入任意字符,當然你可以使用正則表達式過濾輸入,但是這仍然不夠完美,合理的方法應該是使用一個日歷的組件去編輯Time列。
頂
2
踩
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:QTModelViewController使用和認識-創(chuàng)新互聯(lián)
鏈接URL:http://www.rwnh.cn/article0/jdjoo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站改版、電子商務、品牌網(wǎng)站制作、定制開發(fā)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)