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 但是,有一些特殊的按鍵比如...