Qt Model View 學習筆記 六

2021-05-23 18:51:36 字數 3036 閱讀 9942

在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...