Qt - 如何将数据与QTableWidgetItem关联?

问题描述:

我想将附加数据与插入到表中的每个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

您可以使用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

你可以从你的QTableItem派生,并提供自己的数据成员,或者您可以使用QTableView中与自己的模型。

+1

从我的经验来看,这比setData数据Qt函数更灵活 – drahnr 2010-04-06 06:14:24

+1

是的,但是对于初学者来说,richard的答案可能更容易 - 或者如果您只是试图翻译一些MFC代码 – 2010-04-06 14:55:54