问题
I have a QListWidget
of calendars. Each QListWidgetItem
is logically associated with an instance of Calendar
, which is a class that belongs to the Model side of the application.
Can I store this association in the form of a pointer using QListWidgetItem::setData
? When I attempt to do this, I get the following error:
error: 'QVariant::QVariant(void*)' is private
回答1:
There is another constructor for void*: QVariant::QVariant(int typeOrUserType, const void * copy)
where you should pass an unique integer to represent the pointer type.
But as stated by the documentation, you could declare your pointer type with Q_DECLARE_METATYPE(Calendar*)
and use QVariant::fromValue<Calendar*>(...)
and QVariant::value<Calendar*>()
to store and retrieve the value.
Or instead, because you are using a QListWidget
instead of a regular model, you can just subclass QListWidgetItem
, and add a Calendar*
member variable with the required accessors, to avoid the overhead of using QVariant
.
回答2:
I would suggest looking at this solution as well, which I think is quite elegant: (there are minor syntax errors, but you will spot them quickly or the compiler will issue an error)
https://web.archive.org/web/20171025163314/http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/
来源:https://stackoverflow.com/questions/9248001/storing-pointers-using-qlistwidgetitemsetdata