Q_OBJECT サブクラスの QVariant の動作を理解するのに問題があります (GVPalette* は Q_OBJECT マクロを持つ BasicItemNode から継承します)。コンパイルエラーは
/qobject.h:471: instantiated from ‘T qobject_cast(QObject*) [with T = GVPalette*]’
/qvariant.h:584: instantiated from ‘static T QtPrivate::QVariantValueHelper<T>::object(const QVariant&) [with T = GVPalette*]’
/qvariant.h:100: instantiated from ‘static ReturnType QtPrivate::ObjectInvoker<Derived, Argument, ReturnType>::invok
e(Argument) [with Derived = QtPrivate::QVariantValueHelper<GVPalette*>,
Argument = const QVariant&, ReturnType = GVPalette*]’
/qvariant.h:593: instantiated from ‘T qvariant_cast(const QVariant&) [with T = GVPalette*]’
/CLSMetaType.cpp:50: instantiated from here
/BasicItemNode.h:27: error: void value not ignored as it ought to be
以下のスニペットの 2 行目は CLSMetaType.cpp:50 に対応し、6 行目は BasicItemNode.h:27 に対応します。
CLSMetaType.cpp
if(variant.canConvert<GVPalette*>()) {
1.//retVal = variant.value<GVPalette*>()->objectName();
2. GVPalette* gv = variant.value<GVPalette*>();
3. retVal = gv->objectName();
}
BasicItemNode.h
4. class BasicItemNode : public QObject
5. {
6. Q_OBJECT
Qt5 - オープンソース バージョン g++ - 4.6.3