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.
他のヒント
解決AHHHHH
、多くのおかげで、私が使用してきました。
item->data(1,Qt::UserRole).value<Pkg>();
の項目は、このイベントで選択QTreeWidgetItemあります:
connect(packList,SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(setActualPackage(QTreeWidgetItem*)));
所属していません StackOverflow