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 回答