Хранение указателей с помощью 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/