Вопрос QVariant и qRegisterMetaType
Вопрос
У меня есть класс Pkg, и мне нужно использовать его в форме QVariant.
В конце моего Pkg.h у меня есть:
Q_DECLARE_METATYPE(Pkg)
и это не дает ошибок компиляции, но в моем main.cpp мне нужно сделать:
qRegisterMetaType<Pkg>("Pkg");
и это тоже не дает ошибок, но когда я пытаюсь создать QVariant(Pkg), я получаю множество ошибок, например:
In member function 'void MainWindow::FillPackagesList()':
mainWin.cpp:233: error: 'qRegisterMetaType' isnot a member of 'QMetaType' mainWin.cpp:234: error: no matching function for call to QVariant::QVariant(Pkg&)'
/usr/lib/qt/include/QtCore/qvariant.h:208: note: QVariant::QVariant(Qt::GlobalColor)
/usr/lib/qt/include/QtCore/qvariant.h:206: note: QVariant::QVariant(const QRegExp&)
/usr/lib/qt/include/QtCore/qvariant.h:204: note: QVariant::QVariant(const QLocale&)
/usr/lib/qt/include/QtCore/qvariant.h:203: note: QVariant::QVariant(const QUrl&)
/usr/lib/qt/include/QtCore/qvariant.h:201: note: QVariant::QVariant(const QRectF&)
/usr/lib/qt/include/QtCore/qvariant.h:200: note: QVariant::QVariant(const QRect&)
и снова ошибки за ошибками...
Решение
Конструктор QVariant не будет просто принимать какой-либо старый тип.Вам нужно использовать QVariant::setValue() или qVariantFromValue.
Другие советы
ааааа решено, большое спасибо, я использовал:
item->data(1,Qt::UserRole).value<Pkg>();
item — это QTreeWidgetItem, выбранный в этом событии:
connect(packList,SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(setActualPackage(QTreeWidgetItem*)));
Не связан с StackOverflow