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

清源游民 gameogre@gmail.com

在views中選擇數據項

概念

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

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

選擇項
構建一個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);
結果如下:


讀取選擇狀態
存儲在選擇模型中indexes可以用selectionIndexes()函數來讀取。它返回一個未排序的model indexes列表,我們可以遍歷它,如果我們知道他們關聯于哪個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);
     }
選擇模型在選擇發生變化時會發出信號。這用于通知別的組件包括整體與當前焦點項所發生的變化。我們可以連接selectionChanged()信號到一個槽,檢查當信號產生時哪些項被選擇或被取消選擇。這個槽被調用時帶有兩個參數,它們都是QItemSelection對象,一個包含新被選擇的項,另一個包含新近被取消選擇的項。下面的代碼演示了給新選擇的項添加數據內容,新近被取消選擇的項的內容被清空。
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, "");
 }
也可以通過響應currentChanged()信號來跟蹤當前焦點項.對應的槽就有兩個接收參數,一個表示之前的焦點,另一個表示當前的焦點。
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標記,其意義一目了然。沿上面例子的結果執行以下代碼:
     QItemSelection toggleSelection;

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

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


缺省情況下,選擇指令只針對單個項(由model indexes指定)。然而,選擇指令可以通過與另外標記的結合來改變整行和整列。舉例來說,假如你只使用一個index來調用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);
結果如下


選擇模型中所有項
為了選擇model中的所有項,必須先得創建一個選擇,它包括當前層次上的所有項:
     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();
對具有層次結構的model來說,可以使用hasChildren()函數來決定給定項是否是其它項的父項。

posted on 2007-06-19 14:29 清源游民 閱讀(8439) 評論(0)  編輯 收藏 引用 所屬分類: Qt
<2014年1月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

留言簿(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>
            亚洲制服丝袜在线| 亚洲精品国产精品国自产观看浪潮| 亚洲男人的天堂在线观看| 欧美国产一区二区| 日韩五码在线| 99国产精品国产精品久久| 欧美日韩视频在线观看一区二区三区 | 国产精品一区二区黑丝| 亚洲影院污污.| 亚洲欧美国产视频| 国产一区二区三区黄视频| 久久久久久久久久久久久久一区 | 国产一区在线看| 久久久久久久综合| 美日韩免费视频| 一区二区三区视频在线看| 亚洲精品中文字幕有码专区| 欧美三级在线视频| 亚洲欧洲99久久| 久久精品人人爽| 日韩视频一区二区三区在线播放免费观看 | 韩日在线一区| 久热精品视频在线观看| 欧美大片18| 亚洲欧美日韩网| 玖玖玖免费嫩草在线影院一区| 欧美视频在线看| 亚洲你懂的在线视频| 欧美一区二区视频在线| 亚洲高清视频一区二区| 亚洲日本免费| 欧美日韩中文另类| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲美女av在线播放| 免费成人av在线| 制服丝袜亚洲播放| 欧美亚洲系列| 国产欧美日韩麻豆91| 久久婷婷国产麻豆91天堂| 老牛国产精品一区的观看方式| 国产精品欧美日韩一区二区| 久久精品亚洲一区二区| 99国产精品久久久| 一区二区三区久久久| 国产日韩欧美在线看| 美女999久久久精品视频| 欧美理论电影网| 欧美在线啊v| 久久这里有精品15一区二区三区 | 久久激情五月婷婷| 免费高清在线一区| 亚洲免费伊人电影在线观看av| 久久偷窥视频| 欧美激情亚洲| 久久精品综合| 欧美日韩视频在线| 久热精品在线| 欧美美女bb生活片| 久久午夜色播影院免费高清| 欧美午夜不卡视频| 欧美a级大片| 欧美精品久久一区| 欧美黑人国产人伦爽爽爽| 国产精品视频免费一区| 亚洲激情小视频| 国内外成人免费激情在线视频网站 | 午夜精品av| 噜噜噜久久亚洲精品国产品小说| 国产视频久久网| 亚洲欧洲免费视频| 在线观看日韩一区| 亚洲视频一二三| 亚洲精品黄色| 欧美一区二区三区免费看 | 欧美在线观看网站| 亚洲国产精品第一区二区三区 | 国产视频在线观看一区二区| 亚洲国产成人av在线| 一区在线影院| 亚洲欧美日韩久久精品| 亚洲一区精品电影| 欧美日在线观看| 亚洲人成人99网站| 激情综合五月天| 欧美一级网站| 久久精品视频在线| 国产精品夜夜夜| 亚洲欧美bt| 欧美在线1区| 国产一区二区你懂的| 午夜视频久久久| 久久精彩视频| 国内精品免费午夜毛片| 欧美主播一区二区三区| 久久五月天婷婷| 在线播放一区| 久久夜色精品| 欧美 日韩 国产精品免费观看| 欧美国产大片| 99re视频这里只有精品| 亚洲香蕉视频| 国产精品视频免费观看| 午夜影视日本亚洲欧洲精品| 欧美在线免费播放| 一区二区三区在线看| 久久手机精品视频| 亚洲国产网站| 亚洲专区免费| 国内精品久久久久久| 久久精品一区蜜桃臀影院| 亚洲欧美日韩一区| 精品999久久久| 免费在线亚洲| 99riav久久精品riav| 欧美一区二区三区免费观看视频| 美日韩免费视频| 亚洲精品少妇30p| 欧美在线视频免费播放| 国产在线日韩| 欧美精品aa| 亚洲欧美在线免费| 亚洲国产精品黑人久久久| 一区二区三区视频免费在线观看| 久久精品一区二区三区不卡牛牛| 一区二区成人精品| 国产性猛交xxxx免费看久久| 久久综合网色—综合色88| 日韩小视频在线观看| 在线综合欧美| 亚洲欧洲日韩在线| 国产丝袜一区二区| 欧美成人亚洲成人日韩成人| 亚洲一区二区三区视频| 欧美www在线| 欧美一区二区高清| 亚洲免费av片| 伊人男人综合视频网| 国产精品成人播放| 狂野欧美一区| 午夜一区在线| 亚洲国产精品va在线看黑人| 亚洲欧美激情一区二区| 国内外成人免费激情在线视频 | 国内自拍亚洲| 欧美丝袜一区二区| 玖玖国产精品视频| 性欧美videos另类喷潮| 一区二区三区你懂的| 欧美刺激午夜性久久久久久久| 国产一区二区三区日韩欧美| 欧美大色视频| 久久久蜜臀国产一区二区| 亚洲一区日韩在线| 一本色道久久综合亚洲精品高清| 一区二区三区欧美在线| 亚洲国产精品嫩草影院| 国产亚洲成年网址在线观看| 欧美四级电影网站| 免费黄网站欧美| 久久久最新网址| 夜夜精品视频| 亚洲美女诱惑| 亚洲精选视频在线| 亚洲精品社区| 亚洲免费观看视频| 日韩视频免费观看高清在线视频| 亚洲香蕉在线观看| 亚洲少妇自拍| 中文精品99久久国产香蕉| 亚洲乱码一区二区| 日韩亚洲欧美一区| 亚洲国产一区二区视频| 亚洲国产小视频在线观看| 国产私拍一区| 国产精品视频久久一区| 国产精品久久久久一区| 欧美午夜精品一区二区三区| 国产精品二区在线观看| 国产精品免费视频xxxx| 国产婷婷色一区二区三区四区| 久久久噜噜噜久久| 麻豆国产精品777777在线| 欧美成人dvd在线视频| 美国十次了思思久久精品导航| 一本色道久久综合狠狠躁的推荐| 欧美在线观看天堂一区二区三区| 国产一区 二区 三区一级| 黄色在线一区| 亚洲区中文字幕| 亚洲影音一区| 久久精品久久99精品久久| 欧美va天堂| 亚洲精品激情| 亚洲精品一区二区三区樱花| 亚洲免费观看| 久久免费国产精品1| 欧美精品一区二区三区在线看午夜 | 香蕉精品999视频一区二区 | 亚洲高清视频在线| 亚洲精品久久久久久下一站|