其實,關于這個東西一直想寫,但是因為懶,就一直沒動筆(捂臉)。
話不多說,進入正題。
對于QListWidget、QTableWidget、QTreeWidget這三個widget來說,它們幾個是Model/View的特殊化,使用較為簡單。
就這三個視窗的使用來個彙總,詳見下方。
有一點說明一下,這裡僅僅列舉常用的方法,并且僅僅寫了個方法名字,具體的參數以及傳回值之類的,需要去好好看看手冊。
1.QListWidget
QListWidget的使用較為簡單,這是一種最簡單的widget類型。
-
增:
常用的方法有
addItem、addItems、insertItem、insertItems(具體的使用詳見手冊)
其中addItem以及addItems常在初始化的時候使用,如果在平常情況下使用這兩個函數,則是在清單末尾處開始添加。insertItem以及insertItems可以在任意位置添加。
-
删:
删除的方法比較頭痛
手冊中建議的方法是takeItem,這個函數的作用是從清單中删除指定行的元素(實際上不是删除,應該叫剪切),然後可以獲得這個元素,但是原先清單中的該元素則消失(與剪切非常相似)。
除此之外,還可以通過擷取指定元素的方法,手動删除掉。
比如currentItem、item、itemAt等函數均可獲得指定的元素(詳見手冊),擷取之後delete就可以實作删除了。
如果是删除整個清單,可以使用clear函數。
-
改:
enmm,這個東西的話,方法就比較多了。
比如可以直接設定視窗的可編輯,或者是獲得指定元素後,通過setText的方式更改文本顯示。
這個根據自己的喜好以及項目要求,自己決定吧,就不細寫了。
-
查:
emmm,這個就更沒啥了,清單的查詢非常簡單。
一個是查詢目前元素或者是目前行,可以使用currentItem、currentRow直接獲得目前元素或者是目前行。
另一個是查詢指定位置的元素,可以使用item或者是itemAt函數獲得。
2. QTableWidget
對于QTableWidget,這是一個使用頻率相當高的控件(在小資料量情況下),這個東西的使用也是比較簡單的。
-
增
這個方法也是超多的。
對于初始化而言,常用的方法是使用setRowCount以及setColumnCount直接設定好行數以及列數,然後在設定好的表格中添加QTableWidgetItem元素,然後就可以使用了。
對于中間的添加,常用的方法是insertRow以及insertColumn函數,用來增加行列,這個東西不需要手動添加item元素,因為預設就已經有元素了,僅僅對其進行操作即可。
-
删
對于表格而言,因為很多操作都是針對于一行或者是一列而言的,是以删除的話,可以采用removeRow以及removeColumn來實作整行整列的删除動作。
如果是要删除某個元素,同QListWidget類似,仍然可以使用takeItem函數來删除指定位置的元素。或者是使用諸如currentItem、item、itemAt等函數獲得指定位置的元素,然後手動delete掉。
如果是删除整個表格,可以使用clear函數。
-
改
emmm,同清單類似,可以通過設定表格的可編輯,以及擷取指定位置的元素,然後使用setText重新指派即可。
-
查
查的話,也同清單類似,使用row、column、currentRow、currentColumn獲得期望的行列;使用item,itemAt、currentItem擷取期望的元素。
3. QTreeWidget
好了,終于到了比較頭痛的樹形控件了,這個同上面的清單以及表格有着很大的不同。
對于清單以及表格來說,它們基本上的檢索都是獨立的,可以不依賴于其他的元素而存在,是以這兩個視窗可以單獨設定某個元素。
但是樹不一樣,每棵樹都有一個根節點,它的所有子節點都依附于這個根節點,如果這個根節點沒有了,那麼它所有的子節點,以及子節點的子節點将全部消失。
所有的操作都依賴于這個根(或者說是每個根節點),理論上可以有無限個跟節點,但是也可以了解為所有的跟節點有一個總的root節點(看不見,但是應該有,這點我需要去看看源碼的實作,然後後面确定了,這裡再更新一下)。
是以,下面的增删改查操作,就要分為“根節點”以及“子節點”來分别進行(有些操作可以不這麼劃分,後面再細說)。
這裡需要說明一個概念,“根節點”以及“子節點”的概念是相對的,一個節點既可以是“根節點”,也可以是“子節點”,這需要考慮到它的相對位置。
但是需要明确一個概念,就是“頂層根節點”,這個東西,每一個枝幹上隻有唯一的“頂層根節點”,也就是說這個“頂層根節點”是唯一辨別的。
-
增
對于增加“頂層根節點”,可以使用addTopLevelItem、addTopLevelItems來進行添加。
對于它的“子節點”,則需要在獲得根節點的情況下,使用addChild、addChildren函數進行添加。
也可以使用insertChild、insertChildren函數在指定位置添加。
子節點如果想要添加子節點,也是需要通過addChild、addChildren函數進行添加,因為相對于它的子節點而言,這個節點已經變成了“根節點”。
-
删
對于删除操作,可以采用takeTopLevelItem函數,删除(剪切)某個指定的“頂層根節點”,這種方法僅僅适用于“頂層根節點”,對于普通的節點,我暫時沒有找到類似的方法。
還有一個通用的方法,就是直接獲得指定的節點(無論是普通的節點,還是“頂層根節點”),然後手動delete掉。
這裡需要注意的是,如果删除的這個節點有子節點,則它的子節點在其被删除的時候,也會被删除掉(嚴格來講,是在其被删除之前就已經被删除掉了,因為需要事先周遊它的所有子節點,以及子節點的子節點,然後從葉子結點的位置開始删除,一點點往上,直至删除掉這個節點)。
如果想要删除它的子節點,可以使用removeChild函數進行删除(雖然這玩意一次隻能删除一個子節點)。
-
改
這個就可以通過獲得指定元素,然後使用setText的方式進行更改,也可以設定樹的可編輯。
-
查
可以使用itemAt,currentItem來獲得元素,如果想要知道它的子節點,也可以在獲得這個元素後,使用childCount函數獲得子節點的數目,然後使用child獲得指定的子節點。
總結:
這三個視窗,有着不同。但是因為都是簡化的Model/View,是以有着共通之處,就是“行”、“列”,以及元素嵌套在view中,資料都是以item的形式存儲的,絕大多數的操作也都是針對item的,一定要明确這一點。(有興趣的,可以去看看源碼)
這三個視窗的添加元素比較簡單,但是删除某個元素一般的方法是獲得指定位置的元素,然後delete之。