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

清源游民 gameogre@gmail.com

在views中選擇數(shù)據(jù)項

概念

用于新的view類中的選擇模型比Qt3中的模型有了很大的改進。它為基于model/view架構(gòu)的選擇提供了更為全面的描述。盡管對提供了的views來說,負責操縱選擇的標準類已經(jīng)足以應(yīng)付,但是你也可以創(chuàng)建特定的選擇模型來滿足你特殊的需求。
關(guān)于在view被選擇的數(shù)據(jù)項的信息保持在QItemSelectionModel類的實例中。它也為每個獨立的model中的數(shù)據(jù)項維護model indexes信息,與任何views都關(guān)聯(lián)關(guān)系。既然一個model可用于多個views,那么在多個views之間共享選擇信息也是可以做到的,這使得多個views可以以一致的方式進行顯示。
選擇由多個選擇范圍組成。通過僅僅記錄開始model indexes與結(jié)束model indexes,最大化地記錄了可以選擇的范圍。非連續(xù)選擇數(shù)據(jù)項由多個選擇范圍來描述。選擇模型記錄model indexes的集合來描述一個選擇。最近選擇的數(shù)據(jù)項被稱為current selection。應(yīng)用程序可以通過使用某種類型的選擇命令來修改選擇的效果。
在進行選擇操作時,可以把QItemSelectionModel看成是model中所有數(shù)據(jù)項選擇狀態(tài)的一個記錄。一旦建立一個選擇模型,所有項的集合都可以選擇,撤消選擇,或者選擇狀態(tài)進行切換而不需要知道哪個數(shù)據(jù)項是否已經(jīng)被選擇過。所有被選擇的項的indexes在任何時候都可以得到,通過信號槽機制可以通知別的組件發(fā)生的變化。

使用選擇模型
標準view類提供了缺省的選擇模型,它們可以在大次數(shù)程序中使用。一個view中的選擇模型可以通過調(diào)用view的函數(shù)selectionModel()取得,也可以通過setSelectionModel()在多個views之間共享選擇模型,因此總的來說構(gòu)建一個新的模型一般情況不太必要。
通過給QItemSelection指定一個model,一對model indexes,可以創(chuàng)建一個選擇。indexes的用法依賴于給定的model,這兩個indexes被解釋成選擇的區(qū)塊中的左上角項和右下角項。model中的項的選擇服從于選擇模型。

選擇項
構(gòu)建一個table model ,它有32個項,用一個table view進行顯示:
     TableModel *model = new TableModel(8, 4, &app);

     QTableView *table = new QTableView(0);
     table->setModel(model);

     QItemSelectionModel *selectionModel = table->selectionModel();
     QModelIndex topLeft;
     QModelIndex bottomRight;

     topLeft = model->index(0, 0, QModelIndex());
     bottomRight = model->index(5, 2, QModelIndex());
    
      QItemSelection selection(topLeft, bottomRight);
     selectionModel->select(selection, QItemSelectionModel::Select);
結(jié)果如下:


讀取選擇狀態(tài)
存儲在選擇模型中indexes可以用selectionIndexes()函數(shù)來讀取。它返回一個未排序的model indexes列表,我們可以遍歷它,如果我們知道他們關(guān)聯(lián)于哪個model的話。
    QModelIndexList indexes = selectionModel->selectedIndexes();
     QModelIndex index;

     foreach(index, indexes) {
         QString text = QString("(%1,%2)").arg(index.row()).arg(index.column());
         model->setData(index, text);
     }
選擇模型在選擇發(fā)生變化時會發(fā)出信號。這用于通知別的組件包括整體與當前焦點項所發(fā)生的變化。我們可以連接selectionChanged()信號到一個槽,檢查當信號產(chǎn)生時哪些項被選擇或被取消選擇。這個槽被調(diào)用時帶有兩個參數(shù),它們都是QItemSelection對象,一個包含新被選擇的項,另一個包含新近被取消選擇的項。下面的代碼演示了給新選擇的項添加數(shù)據(jù)內(nèi)容,新近被取消選擇的項的內(nèi)容被清空。
void MainWindow::updateSelection(const QItemSelection &selected,
     const QItemSelection &deselected)
 {
     QModelIndex index;
     QModelIndexList items = selected.indexes();

     foreach (index, items) {
         QString text = QString("(%1,%2)").arg(index.row()).arg(index.column());
         model->setData(index, text);
     }

     items = deselected.indexes();

     foreach (index, items)
      model->setData(index, "");
 }
也可以通過響應(yīng)currentChanged()信號來跟蹤當前焦點項.對應(yīng)的槽就有兩個接收參數(shù),一個表示之前的焦點,另一個表示當前的焦點。
void MainWindow::changeCurrent(const QModelIndex &current,
     const QModelIndex &previous)
 {
     statusBar()->showMessage(
         tr("Moved from (%1,%2) to (%3,%4)")
             .arg(previous.row()).arg(previous.column())
             .arg(current.row()).arg(current.column()));
 }

更新選擇
選擇指令是通過選擇標志提供的,它被定義在QItemSelectionModel::SelectionFlag中。常用的有Select標記,Toggle標記,Deselect標記,Current標記,Clear標記,其意義一目了然。沿上面例子的結(jié)果執(zhí)行以下代碼:
     QItemSelection toggleSelection;

     topLeft = model->index(2, 1, QModelIndex());
     bottomRight = model->index(7, 3, QModelIndex());
     toggleSelection.select(topLeft, bottomRight);

     selectionModel->select(toggleSelection, QItemSelectionModel::Toggle);
結(jié)果如下:


缺省情況下,選擇指令只針對單個項(由model indexes指定)。然而,選擇指令可以通過與另外標記的結(jié)合來改變整行和整列。舉例來說,假如你只使用一個index來調(diào)用select(),但是用Select標記與Rows標記的組合,那么包括那個項的整行都將被選擇??匆韵率纠?br>     QItemSelection columnSelection;

     topLeft = model->index(0, 1, QModelIndex());
     bottomRight = model->index(0, 2, QModelIndex());

     columnSelection.select(topLeft, bottomRight);

     selectionModel->select(columnSelection,
     QItemSelectionModel::Select | QItemSelectionModel::Columns);

     QItemSelection rowSelection;

     topLeft = model->index(0, 0, QModelIndex());
     bottomRight = model->index(1, 0, QModelIndex());

     rowSelection.select(topLeft, bottomRight);

     selectionModel->select(rowSelection,
     QItemSelectionModel::Select | QItemSelectionModel::Rows);
結(jié)果如下


選擇模型中所有項
為了選擇model中的所有項,必須先得創(chuàng)建一個選擇,它包括當前層次上的所有項:
     QModelIndex topLeft = model->index(0, 0, parent);
     QModelIndex bottomRight = model->index(model->rowCount(parent)-1,
      model->columnCount(parent)-1, parent);

    QItemSelection selection(topLeft, bottomRight);
     selectionModel->select(selection, QItemSelectionModel::Select);
頂級index可以這樣:
QModelIndex parent = QModelIndex();
對具有層次結(jié)構(gòu)的model來說,可以使用hasChildren()函數(shù)來決定給定項是否是其它項的父項。

posted on 2007-06-19 14:29 清源游民 閱讀(8415) 評論(0)  編輯 收藏 引用 所屬分類: Qt
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

留言簿(35)

隨筆分類(78)

隨筆檔案(74)

文章檔案(5)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲午夜91| 欧美三区不卡| 国产精品国产三级国产a| 怡红院精品视频| 久久精品亚洲精品国产欧美kt∨| 亚洲欧美日韩综合| 国产精品r级在线| 欧美在线观看日本一区| 久久精品女人| 宅男噜噜噜66国产日韩在线观看| 亚洲卡通欧美制服中文| 国产精品大片| 欧美sm重口味系列视频在线观看| 久热成人在线视频| 欧美一区二区观看视频| 久久av二区| 亚洲欧美日韩精品久久亚洲区| 久久精品亚洲乱码伦伦中文| 日韩一级不卡| 男女精品视频| 欧美日韩在线播放| 在线一区欧美| 欧美精品成人在线| 你懂的视频一区二区| 国产免费成人| 亚洲视频电影图片偷拍一区| 亚洲国产婷婷香蕉久久久久久| 亚洲一区二区三区午夜| 99国产精品久久久久老师 | 在线亚洲自拍| 免费在线播放第一区高清av| 久久综合一区二区| 狠狠88综合久久久久综合网| 亚洲一区精品在线| 久久精品99无色码中文字幕 | 欧美一区二区三区在线免费观看| 亚洲中字在线| 国产午夜精品全部视频在线播放 | 在线观看视频免费一区二区三区| 亚洲一区二区网站| 久久精品99久久香蕉国产色戒| 国产伦精品一区二区三区照片91 | 久久九九99| 国内精品久久久久影院优| 欧美一区成人| 亚洲第一页在线| 亚洲经典在线| 国产精品成人va在线观看| 国产婷婷色一区二区三区| 老鸭窝91久久精品色噜噜导演| 国产亚洲一区二区三区| 久久精品国产综合| 亚洲国产精品va在看黑人| 99re在线精品| 国产自产2019最新不卡| 欧美顶级大胆免费视频| 亚洲欧美久久久久一区二区三区| 久久久久www| 一区二区高清视频| 国产日韩亚洲| 欧美色视频在线| 欧美二区在线观看| 欧美伊人久久| 亚洲视频精品| 99国产精品国产精品毛片| 欧美激情片在线观看| 久久精品男女| 久久福利精品| 久久久国产成人精品| 亚洲欧美第一页| 亚洲视频欧美在线| 亚洲一区二区三区国产| 亚洲视频二区| 午夜欧美大尺度福利影院在线看| 亚洲精品免费在线| 国产精品99久久久久久久女警 | 欧美成人亚洲成人日韩成人| 亚洲精品美女91| 亚洲精品乱码久久久久久蜜桃麻豆| 国产一区91精品张津瑜| 国产日韩欧美一二三区| 激情综合色丁香一区二区| 国产一区二区成人| 国产精品一级| 亚洲国产一区二区三区在线播| 亚洲人成网站在线观看播放| 日韩视频永久免费观看| 一本不卡影院| 久久精品日韩欧美| 国产亚洲毛片| 在线观看成人小视频| 亚洲激情成人在线| 亚洲一级免费视频| 国产精品高潮呻吟| 欧美午夜精品一区| 国模叶桐国产精品一区| 最新国产の精品合集bt伙计| 一区二区三区欧美日韩| 国产一二三精品| 艳女tv在线观看国产一区| 亚洲精品男同| 小辣椒精品导航| 91久久香蕉国产日韩欧美9色| 亚洲永久在线| 亚洲精美视频| 久久夜色精品国产亚洲aⅴ | 欧美福利电影网| 国产美女精品一区二区三区 | 91久久黄色| 老司机aⅴ在线精品导航| 一区二区三区.www| 欧美日韩国产在线播放网站| 黄色成人av在线| 久久久中精品2020中文| 欧美呦呦网站| 国产亚洲综合在线| 久久久91精品国产| 一区二区三区视频在线播放| 欧美美女喷水视频| 日韩写真在线| 日韩视频免费观看高清完整版| 久久综合九色综合久99| 亚洲国产综合在线| 亚洲国产日韩一级| 这里只有精品在线播放| 欧美激情久久久久| 亚洲乱码国产乱码精品精天堂| 噜噜噜在线观看免费视频日韩| 欧美夜福利tv在线| 欧美激情女人20p| 欧美1区2区3区| 亚洲国内精品| 亚洲视频免费在线观看| 国产视频精品va久久久久久| 久久婷婷一区| 欧美成人a视频| 欧美一级视频| 久久久综合网站| 一区二区三区四区蜜桃| 亚洲一区精品视频| 亚洲国产高清自拍| 中文久久乱码一区二区| 免费中文日韩| 欧美专区18| 欧美日韩精品一本二本三本| 久久精彩视频| 久久精品99国产精品| 欧美国产日韩免费| 久久精品电影| 国产精品美女久久久久aⅴ国产馆| 久久久久五月天| 国产精品蜜臀在线观看| 亚洲日本中文字幕| 亚洲高清中文字幕| 性伦欧美刺激片在线观看| 亚洲在线观看视频| 欧美岛国激情| 欧美成人高清视频| 激情自拍一区| 浪潮色综合久久天堂| 久久综合给合| 黄色一区二区在线| 久久偷窥视频| 蜜桃久久精品乱码一区二区| 国产无一区二区| 欧美一区二区视频观看视频| 午夜日韩av| 国产综合自拍| 久久久99国产精品免费| 久久综合久久88| 亚洲国产91| 欧美日韩国产色综合一二三四 | 欧美日韩免费一区| 亚洲麻豆一区| 久久精品99| 亚洲国产美女久久久久| 久久成人一区| 亚洲另类自拍| 国产精品任我爽爆在线播放| 亚洲女同性videos| 久久久欧美一区二区| 99精品欧美一区二区蜜桃免费| 国产精品mv在线观看| 嫩草影视亚洲| 性欧美xxxx视频在线观看| 亚洲国产影院| 久久爱www| 亚洲激情综合| 亚洲国产精品毛片| 狠狠色狠狠色综合人人| 久久综合成人精品亚洲另类欧美 | 亚洲国产综合视频在线观看| 亚洲免费影视| 一区二区三区视频观看| 在线免费观看成人网| 国产精品视频成人| 欧美黄免费看| 欧美精品久久久久久久免费观看| 亚洲在线第一页| 香蕉成人啪国产精品视频综合网|