Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt - How to associate data with QTableWidgetItem?

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?

like image 536
Narek Avatar asked Apr 05 '10 16:04

Narek


2 Answers

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);
like image 52
richardwb Avatar answered Sep 20 '22 18:09

richardwb


You could derive from QTableItem and provide your own data member, or you could use the QTableView with your own model.

like image 45
Martin Beckett Avatar answered Sep 23 '22 18:09

Martin Beckett