在views中選擇資料項
概念
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)
選擇模型在選擇發生變化時會發出訊號。這用於通知別的元件包括整體與當前焦點項所發生的變化。我們可以連線selectionchanged()訊號到乙個槽,檢查當訊號產生時哪些項被選擇或被取消選擇。這個槽被呼叫時帶有兩個引數,它們都是qitemselection物件,乙個包含新被選擇的項,另乙個包含新近被取消選擇的項。下面的**演示了給新選擇的項新增資料內容,新近被取消選擇的項的內容被清空。
void mainwindow::updateselection(const qitemselection &selected,
const qitemselection &deselected)
items = deselected.indexes();
foreach (index, items)
model->setdata(index, "");
}也可以通過響應currentchanged()訊號來跟蹤當前焦點項.對應的槽就有兩個接收引數,乙個表示之前的焦點,另乙個表示當前的焦點。
void mainwindow::changecurrent(const qmodelindex ¤t,
const qmodelindex &previous)
更新選擇
選擇指令是通過選擇標誌提供的,它被定義在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標記的組合,那麼包括那個項的整行都將被選擇。看以下示例:
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()函式來決定給定項是否是其它項的父項。
Qt Model View 學習筆記 五
view 類 概念 在model view架構中,view從model中獲得資料項然後顯示給使用者。資料顯示的方式不必與model提供的表示方式相同,可以與底層儲存資料項的資料結構完全不同。內容與顯式的分離是通過由qabstractitemmodel 提供的標準模型介面,由qasbstractite...
Qt Model View 學習筆記 五
view 類 概念 在model view架構中,view從model中獲得資料項然後顯示給使用者。資料顯示的方式不必與model提供的表示方式相同,可以與底層儲存資料項的資料結構完全不同。內容與顯式的分離是通過由qabstractitemmodel提供的標準模型介面,由qasbstractitem...
Qt Model View 學習筆記 四
qt model view 學習筆記 2010 06 28 12 42 03 閱讀38 字型大小 大中小 訂閱建立新的models 介紹 model view元件之間功能的分離,允許建立model利用現成的views。這也可以使用標準的功能 圖形使用者介面元件像qlistview,qtablevie...