2010-04-05 63 views
6

我想將附加數據與插入到表中的每個QTableWidgetItem關聯起來,以便將來使用這些數據,當它在表項上單擊時。但是這些數據不應該是可見的。我怎樣才能做到這一點?Qt - 如何將數據與QTableWidgetItem關聯?

+1

這是我對Qt最大的抱怨之一。在我使用它的幾個月裏,我還沒有找到一種類似於.NET中數據綁定的簡單機制。 – 2010-04-05 16:53:10

+0

所有Qt的項目顯示類(樹,表,列表)都基於模型/視圖,很容易讓後端模型成爲您喜歡的任何東西。 LINQ沒有單擊鏈接到SQL,但它更靈活。 – 2010-04-06 14:44:32

+1

@Martin我把它稱爲「可行」,而不是「容易」......儘管我認爲這比直接與演示文稿相關的數據要好。 – 2010-04-08 20:07:24

回答

20

您可以使用QTableWidgetItem::setData()像這樣:

setData(Qt::UserRole, myData); // set 

myData是支持QVariant類型。您可以使用QTableWidgetItem::data()來檢索您存儲的值。

如果您需要一個以上,您可以使用Qt::UserRole + 1,+ 2等(Qt::UserRole是「可用於特定應用目的的第一個角色」,您可以閱讀有關其他類型的更多信息角色here)。

如果您存儲的是QVariant本機不支持的自定義類型,則需要使用Qt元對象系統註冊您的類型。看看QMetaType瞭解更多細節。

如果你想存儲一個整數,例如:

QTableWidgetItem* widgetItem = tableWidget->item(row, col); // get the item at row, col 
int myInteger = 42; 
widgetItem->setData(Qt::UserRole, myInteger); 
// ... 
myInteger = widgetItem->data(Qt::UserRole); 
+1

更好的回答! – 2010-04-05 16:50:29

+0

如何使用setData()函數將整數與表項相關聯?我應該做以下事情:item.setData(Qt :: UserRole,myInteger)? – Narek 2010-04-05 17:02:22

+0

我改變了這個例子更清楚,希望它有幫助。 – richardwb 2010-04-05 17:05:19

5

你可以從你的QTableItem派生,並提供自己的數據成員,或者您可以使用QTableView中與自己的模型。

+1

從我的經驗來看,這比setData數據Qt函數更靈活 – drahnr 2010-04-06 06:14:24

+1

是的,但是對於初學者來說,richard的答案可能更容易 - 或者如果您只是試圖翻譯一些MFC代碼 – 2010-04-06 14:55:54

相關問題