views:

1099

answers:

2

I want to associate aditional 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?

+4  A: 

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);
richardwb
Better answer !
Martin Beckett
How can I associate an integer to table item with setData() function? Should I do following: item.setData(Qt::UserRole, myInteger)?
Narek
I changed the example to be more clear, hope it helps.
richardwb
Thank you very much! I have used this function bu with other Qt Roles and effect was not what I want so I got confused! Thanks!
Narek
If you are adding more than 2 data elements to each table item, it starts to get easier to create a model and use QTableView instead, IMO.
Caleb Huitt - cjhuitt
+3  A: 

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

Martin Beckett
From my experience this is much more flexible than setData data Qt functions
penguinpower
Yes but richard's answer is probably easier for a beginner - or if you are just trying to translate some MFC code
Martin Beckett