Qt - How to associate data with QTableWidgetItem?

Narek picture Narek · Apr 5, 2010 · Viewed 23.2k times · Source

I want to associate additional data with each QTableWidgetItem inserted into the table, in order to use that data in future, when it is being clicked on a table item. But that data should not be visible. How can I do that?

Answer

richardwb picture richardwb · Apr 5, 2010

You can use QTableWidgetItem::setData() like so:

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

Where myData is a supported QVariant type. You can use QTableWidgetItem::data() to retrieve the value that you store.

If you need more than one you can use Qt::UserRole + 1, + 2, and so on (Qt::UserRole is "The first role that can be used for application-specific purposes.", you can read more about the other types of roles here).

If you're storing a custom type that isn't natively supported by QVariant you will need to register your type with the Qt meta-object system. Look at QMetaType for more details on that.

If you wanted to store an integer, for example:

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);