我正在使用一個小型的qt應用程序(使用PyQt4),我想出了一個想法,但我不確定如何實現它。我有一個QTableView代表一些數據,我想向QTableView添加另一列,其中包含一個複選框控件,可以連接到模型的某個部分。例如,像這樣:在QTableView中嵌入控件?
注意刪除列有各行的複選框控件(雖然這是一個web應用程序,而不是一個桌面應用程序的Qt,主要是相同的)。如果我可以選擇多行,點擊右鍵,然後選擇「選中/取消選中」。
如果有任何不清楚的地方,請在這裏留言,我會澄清。
我正在使用一個小型的qt應用程序(使用PyQt4),我想出了一個想法,但我不確定如何實現它。我有一個QTableView代表一些數據,我想向QTableView添加另一列,其中包含一個複選框控件,可以連接到模型的某個部分。例如,像這樣:在QTableView中嵌入控件?
注意刪除列有各行的複選框控件(雖然這是一個web應用程序,而不是一個桌面應用程序的Qt,主要是相同的)。如果我可以選擇多行,點擊右鍵,然後選擇「選中/取消選中」。
如果有任何不清楚的地方,請在這裏留言,我會澄清。
實現自己的表模型比使用QStandardItemModel
(如@Andy建議)更多的工作,但它確實給你罰款控制你想做什麼,所以我會試着給你一個做什麼的總結。我假設你知道Qt's documentation和PyQt's class documentation的全部內容,並且可以查找你需要的任何類。 (我可能會overexplaining如果你已經有了一個QTableView
但不是讓出來的東西好,我想。)
爲了得到辨認的狀態:
QTableModel
一個子類。
QSqlTableModel
)。rowCount
,columnCount
,data
和setData
。
rowCount
和columnCount
與您用於數據模型的內容相當直接。如果您基本上使用二維數組(或列表清單),則它們可以短至一行。data
是事情變得有趣的地方。項目模型存儲幾個不同的字段(Qt呼叫角色)以及data
返回的內容取決於要求的角色。請注意,我會討論返回的數據類型,但總是需要將其包裝爲QVariant
。
Qt.DisplayRole
是任何文本顯示在表的單元格中。這是您的實際數據,並且是常見情況(因此這是默認角色)。Qt.CheckStateRole
是一個布爾值。返回Qt.Checked
將顯示一個選中的複選框,Qt.Unchecked
將返回一個未選中的複選框。如果所有你想要包含的列是複選框只處理這個角色。QVariant
。setData
對稱於data
。您應該處理您在data
:Qt.DisplayRole
中處理的實際數據角色,以及Qt.CheckStateRole
作爲複選框。爲了允許的行和列和細胞的多個選擇。要做到這一點,你想了解selection models。簡短的版本是:
view.setSelectionMode(QAbstractItemView.ContiguousSelection
)。這會讓你突出顯示連續的單元格。您還可以突出顯示任意單元格:請參閱QAbstractView.SelectionMode
。view.selectionModel().selectedIndexes()
。您可以用for
循環遍歷這些循環。要允許右鍵點擊:
contextMenuEvent
。QMenu
並將其連接到您需要的任何插槽。如需更深入瞭解,請閱讀Qt guide to Model/View(如果您尚未閱讀)。絕對看看Qt item view examples。其中許多描述是在PyQt中用更少的代碼(包括兩個@Jesse提到的)實現的,而樹模型示例繼承到表,但工作量少得多(如上所述,您需要實現更少的工作)。
在Qt/C++中,您可以爲列中的自定義項目創建委託。我會假設你可以在PyQt中做類似的事情。請參見下面的例子:
你也可以看看在QStandardItemModel,讓您通過「可檢查」狀態的項目進行交互的界面!
你也可以從化QAbstractItemModel繼承和使用Qt的作用:: CheckStateRole ...