2

クラス 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&)          

そしてまたエラーにエラー...

4

2 に答える 2

6

QVariant コンストラクターは、古い型だけを取るわけではありません。QVariant::setValue()またはqVariantFromValueを使用する必要があります。

于 2008-12-11T02:08:47.697 に答える
0

ああ、解決しました、どうもありがとう、私は使用しました:

 item->data(1,Qt::UserRole).value<Pkg>();

item は、このイベントで選択された QTreeWidgetItem です。

connect(packList,SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(setActualPackage(QTreeWidgetItem*)));
于 2008-12-11T19:07:13.257 に答える