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&)          

и опять ошибки за ошибками...


person Giancarlo    schedule 10.12.2008    source источник
comment
Ваш вопрос не показывает фактическое сообщение об ошибке.   -  person shoosh    schedule 10.12.2008


Ответы (2)


Конструктор QVariant не может просто взять любой старый тип. Вам необходимо использовать QVariant::setValue() или qVariantFromValue.

person Michael Bishop    schedule 11.12.2008

аааа решено, большое спасибо, я использовал:

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

item — это QTreeWidgetItem, выбранный в этом событии:

connect(packList,SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(setActualPackage(QTreeWidgetItem*)));
person Giancarlo    schedule 11.12.2008