青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

清源游民 gameogre@gmail.com

Model類

基本概念
在model/view構(gòu)架中,model為view和delegates使用數(shù)據(jù)提供了標(biāo)準(zhǔn)接口。在Qt中,標(biāo)準(zhǔn)接口QAbstractItemModel類中被定義。不管數(shù)據(jù)在底層以何種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),QAabstractItemModel的子類會(huì)以層次結(jié)構(gòu)的形式來(lái)表示數(shù)據(jù),結(jié)構(gòu)中包含了數(shù)據(jù)項(xiàng)表。我們按這種約定來(lái)訪問model中的數(shù)據(jù)項(xiàng),但這個(gè)約定不會(huì)對(duì)如何顯示這些數(shù)據(jù)有任何限制。數(shù)據(jù)發(fā)生改變時(shí),model通過(guò)信號(hào)槽機(jī)制來(lái)通知關(guān)聯(lián)的views。

Model Indexes

為了使數(shù)據(jù)存儲(chǔ)與數(shù)據(jù)訪問分開,引入了model index的概念。通過(guò)model index,可以引用model中的數(shù)據(jù)項(xiàng),Views和delegates都使用indexes來(lái)訪問數(shù)據(jù)項(xiàng),然后再顯示出來(lái)。因此,只有model需要了解如何獲取數(shù)據(jù),被model管理的數(shù)據(jù)類型可以非常廣泛地被定義。Model indexes包含一個(gè)指向創(chuàng)建它們的model的指針,這會(huì)在配合多個(gè)model工作時(shí)避免混亂。
QAbstractItemModel *model = index.model();

model indexes提供了對(duì)一項(xiàng)數(shù)據(jù)信息的臨時(shí)引用,通過(guò)它可以訪問或是修改model中的數(shù)據(jù)。既然model有時(shí)會(huì)重新組織內(nèi)部的數(shù)據(jù)結(jié)構(gòu),這時(shí)model indexes便會(huì)失效,因此不應(yīng)該保存臨時(shí)的model indexes。假如需要一個(gè)對(duì)數(shù)據(jù)信息的長(zhǎng)期的引用,那么應(yīng)該創(chuàng)建一個(gè)persistent model index。這個(gè)引用會(huì)保持更新。臨時(shí)的model indexes由QModelIndex提供,而具有持久能力的model indexes則由QPersistentModelIndex提供。在獲取對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)的model index時(shí),需要考慮有關(guān)于model的三個(gè)屬性:行數(shù),列數(shù),父項(xiàng)的model index。


行與列
在最基本的形式中,一個(gè)model可作為一個(gè)簡(jiǎn)單的表來(lái)訪問,每個(gè)數(shù)據(jù)項(xiàng)由行,列數(shù)來(lái)定位。這必不意味著
底層的數(shù)據(jù)用數(shù)組結(jié)構(gòu)來(lái)存儲(chǔ)。行和列的使用僅僅是一種約定,它允許組件之間相互通訊。可以通過(guò)指定
model中的行列數(shù)來(lái)獲取任一項(xiàng)數(shù)據(jù),可以得到與數(shù)據(jù)項(xiàng)一一對(duì)應(yīng)的那個(gè)index。
QModelIndex index = model->index(row, column, ...);
Model為簡(jiǎn)單的,單級(jí)的數(shù)據(jù)結(jié)構(gòu)如list與tables提供了接口,它們?nèi)缟厦娲a所顯示的那樣,不再需要?jiǎng)e的信息被提供。當(dāng)我們?cè)讷@取一個(gè)model index時(shí),我們需要提供另外的信息。

上圖代表一個(gè)基本的table model,它的每一項(xiàng)用一對(duì)行列數(shù)來(lái)定位。通過(guò)行列數(shù),可以獲取代表一個(gè)數(shù)據(jù)項(xiàng)的model index .
QModelIndex indexA = model->index(0, 0, QModelIndex());
 QModelIndex indexB = model->index(1, 1, QModelIndex());
 QModelIndex indexC = model->index(2, 1, QModelIndex());
一個(gè)model的頂級(jí)項(xiàng),由QModelIndex()取得,它們上式被用作父項(xiàng)。

父項(xiàng)
類似于表的接口在搭配使用table或list view時(shí)理想的,這種行列系統(tǒng)與view顯示的方式是確切匹配的。
然則,像tree views這種結(jié)構(gòu)需要model提供更為靈活的接口來(lái)訪問數(shù)據(jù)項(xiàng)。每個(gè)數(shù)據(jù)項(xiàng)可能是別的項(xiàng)的
父項(xiàng),上級(jí)的項(xiàng)可以獲取下級(jí)項(xiàng)的列表。
當(dāng)獲取model中數(shù)據(jù)項(xiàng)的index時(shí),我們必須指定關(guān)于數(shù)據(jù)項(xiàng)的父項(xiàng)的信息。在model外部,引用一個(gè)數(shù)據(jù)
項(xiàng)的唯一方法就是通過(guò)model index,因此需要在求取model index時(shí)指定父項(xiàng)的信息。
QModelIndex index = model->index(row, column, parent);

上圖中,A項(xiàng)和C項(xiàng)作為model中頂層的兄弟項(xiàng):
 QModelIndex indexA = model->index(0, 0, QModelIndex());
 QModelIndex indexC = model->index(2, 1, QModelIndex());
A有許多孩子,它的一個(gè)孩子B用以下代碼獲取:
QModelIndex indexB = model->index(1, 0, indexA);

項(xiàng)角色
model中的項(xiàng)可以作為各種角色來(lái)使用,這允許為不同的環(huán)境提供不同的數(shù)據(jù)。舉例來(lái)說(shuō),Qt::DisplayRole被用于訪問一個(gè)字符串,它作為文本會(huì)在view中顯示。典型地,每個(gè)數(shù)據(jù)項(xiàng)都可以為許多不同的角色提供數(shù)據(jù),標(biāo)準(zhǔn)的角色在Qt::ItemDataRole中定義。我們可以通過(guò)指定model index與角色來(lái)獲取我們需要的數(shù)據(jù):
QVariant value = model->data(index, role);

角色指出了從model中引用哪種類型的數(shù)據(jù)。views可以用不同的形式顯示角色,因此為每個(gè)角色提供正確
的信息是非常重要的。通過(guò)為每個(gè)角色提供適當(dāng)數(shù)據(jù),model也為views和delegates提供了暗示,如何正確地
把這些數(shù)據(jù)項(xiàng)顯給用戶。不同的views可以自由地解析或忽略這些數(shù)據(jù)信息,對(duì)于特殊的場(chǎng)合,也可以定義
一些附加的角色。
概念總結(jié):
1,Model indexes為views與delegages提供model中數(shù)據(jù)項(xiàng)定位的信息,它與底層的數(shù)據(jù)結(jié)構(gòu)無(wú)關(guān)。
2,通過(guò)指定行,列數(shù),父項(xiàng)的model index來(lái)引用數(shù)據(jù)項(xiàng)。
3,依照別的組件的要求,model indexes被model構(gòu)建。
4,使用index()時(shí),如果指定了有效的父項(xiàng)的model index,那么返回得到的model index對(duì)應(yīng)于父項(xiàng)的某個(gè)孩子。
5,使用index()時(shí),如果指定了無(wú)效的父項(xiàng)的model index,那么返回得到的model index對(duì)應(yīng)于頂層項(xiàng)的某個(gè)孩子。
6, 角色對(duì)一個(gè)數(shù)據(jù)項(xiàng)包含的不同類型的數(shù)據(jù)給出了區(qū)分。

使用Model Indexes
QDirModel *model = new QDirModel;
     QModelIndex parentIndex = model->index(QDir::currentPath());
     int numRows = model->rowCount(parentIndex);
 for (int row = 0; row < numRows; ++row)
 {
         QModelIndex index = model->index(row, 0, parentIndex);
         tring text = model->data(index, Qt::DisplayRole).toString();
         // Display the text in a widget.

     }
以上的例子說(shuō)明了從model中獲取數(shù)據(jù)的基本原則:
1,model的尺寸可以從rowCount()與columnCount()中得出。這些函數(shù)通常都需要一個(gè)表示父項(xiàng)的model index。
2,model indexes用來(lái)從model中訪問數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng)用行,列,父項(xiàng)model index定位。
3, 為了訪問model頂層項(xiàng),可以使用QModelIndex()指定。
4, 數(shù)據(jù)項(xiàng)為不同的角色提供不同的數(shù)據(jù)。為了獲取數(shù)據(jù),除了model index之外,還要指定角色。

posted on 2007-06-17 14:31 清源游民 閱讀(7563) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Qt
<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

留言簿(35)

隨筆分類(78)

隨筆檔案(74)

文章檔案(5)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久99精品综合| 欧美日韩 国产精品| 夜夜爽www精品| 久久久久中文| 欧美一区二区三区四区在线| 欧美日韩另类字幕中文| 欧美激情一区三区| 亚洲高清三级视频| 久久裸体视频| 久久午夜视频| 激情文学一区| 久久精品国产亚洲a| 久久久久九九九| 国产午夜亚洲精品不卡| 亚洲欧美日韩另类| 久久成人亚洲| 国产欧美日韩另类一区| 午夜精品久久久久久久99水蜜桃 | 欧美日韩系列| 亚洲精品小视频在线观看| 亚洲美女91| 欧美黄色影院| av成人毛片| 午夜精品久久久久久久| 国产精品国产三级国产普通话99| 日韩一级成人av| 亚洲综合色视频| 国产美女在线精品免费观看| 亚洲欧美成人| 久久久精品国产免大香伊| 国内精品模特av私拍在线观看| 久久丁香综合五月国产三级网站| 久久久久久一区二区| 影音先锋日韩资源| 欧美激情亚洲激情| 一区二区三区日韩精品视频| 小嫩嫩精品导航| 激情国产一区| 欧美—级在线免费片| 在线视频欧美精品| 久久久久天天天天| 亚洲精品在线二区| 欧美三级在线视频| 欧美在线免费视屏| 亚洲国产成人精品女人久久久 | 欧美网站大全在线观看| 亚洲一区二区三区久久| 久久精品一区| 亚洲三级国产| 国产精品亚洲а∨天堂免在线| 久久精品国产99精品国产亚洲性色 | 在线成人激情黄色| 欧美日韩综合另类| 久久久成人网| 一区二区动漫| 蜜桃av久久久亚洲精品| 在线亚洲一区观看| 激情综合激情| 国产精品二区影院| 噜噜噜噜噜久久久久久91| 亚洲视频电影图片偷拍一区| 久久婷婷人人澡人人喊人人爽 | 午夜精品国产| 91久久精品网| 国产综合自拍| 国产精品成人一区二区三区夜夜夜 | 欧美视频在线免费| 久久综合给合久久狠狠狠97色69| 日韩视频三区| 欧美mv日韩mv国产网站app| 亚洲欧美日韩另类精品一区二区三区| 韩国一区二区三区美女美女秀| 欧美三级小说| 欧美高潮视频| 久久国内精品视频| 亚洲一区制服诱惑| 亚洲精品一区二区三区福利| 久久综合图片| 欧美在线一级视频| 亚洲免费在线视频| 一个色综合导航| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲国产精品电影| 国产一区二区三区免费在线观看 | 国产日本精品| 国产精品久久久| 欧美精品系列| 欧美电影在线观看| 久久人体大胆视频| 久久久久综合| 久久久精品tv| 欧美自拍丝袜亚洲| 香蕉久久夜色精品| 亚洲主播在线观看| 亚洲永久在线观看| 亚洲午夜羞羞片| 一本大道久久a久久精二百| 亚洲日本成人在线观看| 亚洲激情电影在线| 亚洲国产精品黑人久久久| 免费亚洲一区二区| 欧美激情第五页| 欧美成人一区二区| 亚洲成色精品| 亚洲激情电影中文字幕| 亚洲二区在线观看| 亚洲欧洲日韩在线| 亚洲精品四区| 一本色道88久久加勒比精品 | 亚洲久久成人| 亚洲精品专区| 一区二区三区精密机械公司 | 欧美一级免费视频| 久久国产精品久久国产精品| 久久色在线播放| 麻豆国产va免费精品高清在线| 女女同性精品视频| 欧美精品在线免费播放| 欧美丝袜一区二区三区| 国产精品一区二区久久久久| 国产一区二区三区免费观看| 国产精品夜夜夜一区二区三区尤| 国产无一区二区| 在线日韩中文| 亚洲特黄一级片| 久久精品水蜜桃av综合天堂| 久久影院午夜片一区| 欧美激情欧美狂野欧美精品| 日韩亚洲视频在线| 欧美一区二区在线观看| 久久影视三级福利片| 欧美日韩三级视频| 国产午夜亚洲精品不卡| 91久久精品日日躁夜夜躁欧美| 亚洲先锋成人| 美女网站久久| 一区二区免费在线视频| 久久精品女人天堂| 欧美日韩亚洲一区在线观看| 国产女主播一区二区| 亚洲国产影院| 欧美一区二区视频在线| 亚洲国产精品福利| 午夜精品一区二区三区电影天堂| 欧美sm视频| 国产美女精品在线| 亚洲精品日韩激情在线电影| 先锋影音国产精品| 亚洲欧洲午夜| 久久精品99国产精品酒店日本| 欧美日韩一区二区高清| 亚洲福利在线观看| 欧美一级在线亚洲天堂| 亚洲精品一区二区三区婷婷月| 欧美一区二区三区播放老司机| 欧美日韩国产在线一区| 精品1区2区| 欧美在线看片a免费观看| 亚洲黑丝一区二区| 久久久亚洲高清| 国产精品香蕉在线观看| 一区二区三区视频观看| 欧美91大片| 久久gogo国模裸体人体| 国产精品va在线播放| 亚洲免费久久| 欧美激情精品久久久久久黑人| 欧美一区二区三区久久精品茉莉花| 欧美日韩aaaaa| 亚洲三级影院| 欧美成人综合| 久久久久久久网站| 国产亚洲欧美一区二区三区| 西西人体一区二区| 中文一区二区在线观看| 欧美日韩另类在线| 在线视频精品一区| 亚洲精品国精品久久99热一| 猛干欧美女孩| 亚洲国产婷婷香蕉久久久久久99| 久久在线视频在线| 久久精品日产第一区二区三区 | 国产日韩精品一区观看| 亚洲综合色自拍一区| av成人天堂| 欧美日韩亚洲系列| 亚洲午夜极品| 一区二区三区偷拍| 国产精品99一区二区| 亚洲欧美三级伦理| 亚洲一二三区精品| 国产精品免费区二区三区观看| 亚洲欧美欧美一区二区三区| 亚洲图片你懂的| 国产精品影院在线观看| 久久精品亚洲精品| 久久精品国产欧美亚洲人人爽| 一区视频在线看| 亚洲国产精品成人精品| 欧美日韩1区|