QVariant和qRegisterMetaType问题

时间:2008-12-10 20:41:35

标签: linux qt qvariant kdelibs

我有一个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&)          

再次出现错误错误......

2 个答案:

答案 0 :(得分:6)

QVariant构造函数不会只使用任何旧类型。您需要使用QVariant::setValue()qVariantFromValue

答案 1 :(得分:0)

啊,啊,求你了,非常感谢,我用过:

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

item是在此事件中选择的QTreeWidgetItem:

connect(packList,SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(setActualPackage(QTreeWidgetItem*)));