qt建立tabel Qt中Table的自動化

2021-10-13 10:36:57 字數 1888 閱讀 5170

qt中table的自動化

這裡會介紹qt中table控制項的自動化。我們以qt demo提供的spreadsheet為例進行講解。

table控制項特點

簡單控制項在自動化過程中,一般通過在模型管理器中先做物件拾取,新增到物件模型中,最後將物件拖拽到**編輯器中,生成獲取物件的get[controltype]的方法,以及操作它的方法。

table控制項有行、單元格等子控制項,使用上述傳統的方法並不能有效靈活的操作table控制項的行和單元格等子元素,

首先對qt table中的各個部分進行控制項型別分析,一張完整的表通常由幾個控制項構成:

- table **控制項

- custom 行控制項

- header 表頭控制項,無法編輯

- dataitem 單元格控制項,雙擊後可編輯

從節點樹中也可以看出來一張**中的控制項內容。

操作table中的單元格

為操作table控制項中的某個單元格,首先要在自動化過程中動態定位到它。有兩種方式可以實現。

方法1. 利用模型中的行和單元格控制項,動態設定index屬性

仍舊使用get[controltype]api,具體檢視獲取物件api,在獲取模型物件時動態提供index屬性,例如,已知目標單元格的位置資訊,比如n行m列。假設我們需要獲取**中a6單元格的控制項物件,可以直接利用位置資訊來獲取,**如下:

target = );

let cell = row.getdataitem();

console.log(await cell.value());

結果如下:

該**獲取的是第6行第1個單元格的物件控制項。關於控制項的索引值需要結合父控制項和控制項型別進行理解,這裡行索引值為6的custom控制項(即行控制項)正好指向第6行的原因,是由於**中的橫座標尺是作為表內第乙個custom控制項,索引值為0;那又為什麼第1個單元格的索引值為0呢?這是因為單元格的控制項型別為dataitem,而其父控制項為custom,並且其頭部,也就是縱座標尺的控制項型別是header,因為我們獲取的是第乙個dataitem控制項,因此直接使用0來索引即可。總而言之,對指定型別控制項的索引是在父控制項下、同種型別控制項列表中索引的。

方法2: 通過getcontrols呼叫動態拿到控制項陣列,批量操作

上述方法能夠拿到單個的單元格控制項,然後操作這個單元格。有時我們需要批量操作多個單元格。這時候可以利用getcontrols方法,它可以返回一組符合過濾條件的子控制項。

如需要遍歷**獲取符合條件的單元格,那麼可以先取到所有控制項物件,再篩選出滿足條件的物件。假設我們需要輸出**中所有**大於0的專案,就可以取出所有控制項,經過篩選後輸出,**如下:

let table = await model.gettable("table");

let rows = await table.getcontrols();

await rows.map(async (row) => );

let price = await cells[2].value();

if(parseint(price) > 0) {

let cell = await cells[0].value();

console.log(cell, ":", price);

結果如下:

在執行中會報乙個warning,這是因為第乙個行控制項中不存在custom控制項物件從而導致警告資訊。

上述**是先獲取到全部的行控制項,再對每乙個行控制項,拿到它所有的單元格控制項,然後再通過索引訪問中間需要的控制項。比如已知**price列在第三列,因此索引值為2,而專案名item列在第一列,因此索引值為0。通過這些索引值來取出相應的值。

總結以上就是關於通過父控制項來取得目標控制項的方法。在目標控制項沒有明確識別符號時,先獲取它的父控制項,再一層一層的往下解構直到獲取到目標控制項。除了應用在qt的table控制項外,也可以應用在其它類似的組合控制項中,如list、tree等。

Qt中QTabWidget隱藏某些tab

對於乙個qtabwidget,有時我們需要在不同的狀態下顯示不同的tab,需要隱藏掉某些tab。使用removetab 固然可以做到,但是這樣的話我們再次需要顯示這些tab時再把它們加進去,有時候計算index會很麻煩。所以有沒有什麼辦法可以在不刪除tab的前提下隱藏掉某些tab呢,這樣就能避免再次...

Qt中QTabWidget隱藏某些tab

對於乙個qtabwidget,有時我們需要在不同的狀態下顯示不同的tab,需要隱藏掉某些tab。使用removetab 固然可以做到,但是這樣的話我們再次需要顯示這些tab時再把它們加進去,有時候計算index會很麻煩。所以有沒有什麼辦法可以在不刪除tab的前提下隱藏掉某些tab呢,這樣就能避免再次...

Qt中特殊Tab鍵事件的實現

在qt中,可以使用 void qwidget keypressevent qkeyevent k 來進行鍵盤響應,例如 void form1 keypressevent qkeyevent k else if k key key d else if k key key w 但是,有一些特殊的按鍵比如...