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