A.模型視圖設(shè)計(jì)模式
1.模型與視圖相分離
2.模型對外提供標(biāo)準(zhǔn)接口存取數(shù)據(jù)(不關(guān)心數(shù)據(jù)如何顯示)
3.視圖自定義數(shù)據(jù)的顯示方式(不關(guān)系數(shù)據(jù)如何組織存儲(chǔ))
模型視圖模式的直觀理解
模型視圖的工作機(jī)制
1.當(dāng)數(shù)據(jù)發(fā)生改變時(shí)--模型發(fā)出信號通知視圖
2.當(dāng)用戶與視圖進(jìn)行交互時(shí)--視圖發(fā)出信號提供交互信息
Qt中的模型類層次結(jié)構(gòu)
QAbstractItemModel類為項(xiàng)模型類提供抽象接口.QAbstractItemModel類定義項(xiàng)模型必須使用的標(biāo)準(zhǔn)接口,以便能夠與模型/視圖體系結(jié)構(gòu)中的其他組件進(jìn)行互操作。它不應(yīng)該直接實(shí)例化。相反,您應(yīng)該將其子類化以創(chuàng)建新模型。QAbstractItemModel類是Model / View Classes之一,是Qt模型/視圖框架的一部分。它可以用作QML中項(xiàng)視圖元素的基礎(chǔ)數(shù)據(jù)模型或Qt Widgets模塊中的項(xiàng)視圖類。如果您需要一個(gè)模型用于項(xiàng)目視圖,例如QML的List View元素或C ++小部件QListView或QTableView,您應(yīng)該考慮子類化QAbstractListModel或QAbstractTableModel而不是此類。底層數(shù)據(jù)模型作為表層次結(jié)構(gòu)公開給視圖和委托。如果不使用層次結(jié)構(gòu),則模型是行和列的簡單表。每個(gè)項(xiàng)目都有一個(gè)由QModelIndex指定的唯一索引
Qt中視圖類的層次結(jié)構(gòu)
QAbstractItemView類是使用QAbstractItemModel的每個(gè)標(biāo)準(zhǔn)視圖的基類。QAbstractItemView是一個(gè)抽象類,本身不能實(shí)例化。?它提供了一個(gè)標(biāo)準(zhǔn)接口,通過信號和插槽機(jī)制與模型進(jìn)行互操作,使子類能夠隨著模型的變化保持最新。?此類為鍵盤和鼠標(biāo)導(dǎo)航,視口滾動(dòng),項(xiàng)目編輯和選擇提供標(biāo)準(zhǔn)支持。
模型視圖編程示例
樹狀視圖與模型的代碼示例
創(chuàng)新互聯(lián)公司長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為駐馬店企業(yè)提供專業(yè)的網(wǎng)站制作、成都做網(wǎng)站,駐馬店網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
Widget.cpp
#include "Widget.h"
#include <QDir>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_treeView.setParent(this);
m_treeView.move(10, 10);
m_treeView.resize(500, 300);
m_fsModel.setRootPath(QDir::currentPath());//當(dāng)前路徑下
m_treeView.setModel(&m_fsModel);//模型與視圖的連接
m_treeView.setRootIndex(m_fsModel.index(QDir::currentPath()));
}
Widget::~Widget()
{
}
Widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFileSystemModel>
#include <QTreeView>
class Widget : public QWidget
{
Q_OBJECT
QFileSystemModel m_fsModel;
QTreeView m_treeView;//樹狀視圖
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H
運(yùn)行的結(jié)構(gòu)如圖所示
B.模型視圖設(shè)計(jì)模式
1.模型定義標(biāo)準(zhǔn)接口(成員函數(shù))對數(shù)據(jù)進(jìn)行訪問
2.視圖通過標(biāo)準(zhǔn)接口獲取數(shù)據(jù)并定義顯示方式
3.模型使用信號與槽的機(jī)制通知視圖數(shù)據(jù)變化
4.模型中的數(shù)據(jù)都是以層次結(jié)構(gòu)表示的
C.模型中的索引
1.模型索引時(shí)數(shù)據(jù)與視圖分離的重要機(jī)制
2.模型中的數(shù)據(jù)使用唯一的索引來訪問
3.QModelIndex是Qt中的模型索引類--包含具體數(shù)據(jù)的訪問途徑,包含一個(gè)指向模型的指針
索引中的行與列--線性模型可以使用(row,column)作為數(shù)據(jù)索引
模型中數(shù)據(jù)索引的通用方式--三元組(row,column,parent)
模型中數(shù)據(jù)索引的通用方式
D.Q:不同的視圖如何顯示同一個(gè)模型中的數(shù)據(jù)?
Qt中標(biāo)準(zhǔn)模型定義
數(shù)據(jù)角色的概念
1.模型中的數(shù)據(jù)在視圖中的用途可能不同
2.模型必須為數(shù)據(jù)設(shè)置特定數(shù)據(jù)角色
3.數(shù)據(jù)角色用于提示視圖數(shù)據(jù)的作用
4.數(shù)據(jù)角色是不同視圖以統(tǒng)一風(fēng)格顯示數(shù)據(jù)的標(biāo)準(zhǔn)
Qt中的數(shù)據(jù)角色定義
數(shù)據(jù)角色的意義--定義了數(shù)據(jù)在特定系統(tǒng)下的標(biāo)準(zhǔn)用途,不同的視圖可以通過相同標(biāo)準(zhǔn)顯示數(shù)據(jù)
網(wǎng)頁標(biāo)題:Qt--模式視圖設(shè)計(jì)
當(dāng)前鏈接:http://www.rwnh.cn/article18/jiphdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)公司、用戶體驗(yàn)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)