【问题标题】:Qt - How to associate data with QTableWidgetItem?Qt - 如何将数据与 QTableWidgetItem 关联?
【发布时间】:2011-02-04 11:51:01
【问题描述】:

我想将附加数据与插入到表中的每个 QTableWidgetItem 相关联,以便将来在单击表项时使用该数据。但是这些数据不应该是可见的。我该怎么做?

【问题讨论】:

  • 这是我对 Qt 最大的抱怨之一。在我使用它的几个月里,我还没有找到一种类似于 .NET 中数据绑定的简单机制。
  • Qt 的所有项目显示类(树、表、列表)都是基于模型/视图的,很容易将后端模型制作成你喜欢的任何东西。 LINQ 没有指向 SQL 的一键式链接,但它更灵活。
  • @Martin 我称之为“可行”,而不是“容易”......尽管我认为这比将数据直接绑定到演示文稿要好。
  • @San Jacinto - 也许“明智”会是一个更好的词! ;-)

标签: qt qt4 qtablewidget qtablewidgetitem


【解决方案1】:

你可以像这样使用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);

【讨论】:

  • 如何将整数与表项与 setData() 函数相关联?我应该执行以下操作:item.setData(Qt::UserRole, myInteger)?
  • 非常感谢!我已经将此功能与其他 Qt 角色一起使用,效果不是我想要的,所以我很困惑!谢谢!
  • 如果您向每个表项添加超过 2 个数据元素,创建模型并改用 QTableView 开始变得更容易,IMO。
【解决方案2】:

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

【讨论】:

  • 根据我的经验,这比 setData data Qt 函数灵活得多
  • 是的,但是对于初学者来说,richard 的回答可能更容易——或者如果你只是想翻译一些 MFC 代码
  • 对于以后阅读的人来说,QTableItem 现在是QTableWidgetItem,并且仍然支持子类化。
猜你喜欢
  • 1970-01-01
  • 2012-09-27
  • 2019-03-09
  • 2012-10-25
  • 2011-11-11
  • 2020-01-25
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多