Хранение указателей с помощью QListWidgetItem:: setData

у меня есть QListWidget календарей. Каждый QListWidgetItem логически связан с экземпляром Calendar, который является классом, который относится к модели приложения.

могу ли я сохранить эту ассоциацию в виде указателя, используя QListWidgetItem::setData? Когда я пытаюсь сделать это, я получаю следующую ошибку:

ошибка: 'QVariant:: QVariant (void*)' является частным

2 ответов


есть еще один конструктор для void*:QVariant::QVariant(int typeOrUserType, const void * copy) где вы должны передать уникальное целое число для представления типа указателя.

но, как указано в документации, вы можете объявить свой тип указателя с Q_DECLARE_METATYPE(Calendar*) и использовать QVariant::fromValue<Calendar*>(...) и QVariant::value<Calendar*>() для хранения и извлечения значения.

или вместо этого, потому что вы используете QListWidget вместо обычной модели, вы можете просто подкласс QListWidgetItem и добавить Calendar* переменная-член с необходимыми аксессорами, для избежания накладные расходы на использование QVariant.


Я бы предложил посмотреть на это решение, а также, что я думаю, довольно элегантно: (есть незначительные синтаксические ошибки, но вы их быстро обнаружите или компилятор выдаст ошибку)

http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/