Hi,

I have found a workaround for the problem. I have included the BonjourRecord header because it doesn't have any dependency on dns_sd.h. This way I can safely declare the slots on the header. The main problem here is that the moc_ doesn't know about Q_OS_ANDROID when it is generated which will generate entry for the slots that shouldn't be there.

public slots:
    #ifndef Q_OS_ANDROID
    void recordAdded(const BonjourRecord &record);
    void recordRemoved(const BonjourRecord &record);
    void bonjourRecordResolved(const QHostInfo &hostInfo, int port);
    #endif

Anyway, as you requested, this is the complete output of the error:

.build\moc\moc_LKBridgeBrowser.cpp
.build\moc\moc_LKBridgeBrowser.cpp: In static member function 'static void LKBridgeBrowser::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)': .build\moc\moc_LKBridgeBrowser.cpp:126:21: error: 'class LKBridgeBrowser' has no member named 'recordAdded' case 6: _t->recordAdded((*reinterpret_cast< const BonjourRecord(*)>(_a[1]))); break;
                     ^
.build\moc\moc_LKBridgeBrowser.cpp:127:21: error: 'class LKBridgeBrowser' has no member named 'recordRemoved' case 7: _t->recordRemoved((*reinterpret_cast< const BonjourRecord(*)>(_a[1]))); break;
                     ^
.build\moc\moc_LKBridgeBrowser.cpp:128:21: error: 'class LKBridgeBrowser' has no member named 'bonjourRecordResolved' case 8: _t->bonjourRecordResolved((*reinterpret_cast< const QHostInfo(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
                     ^
In file included from ..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qnamespace.h:37:0, from ..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qobjectdefs.h:41, from ..\..\Qt\5.4\5.4\android_armv7\include\QtCore/qobject.h:40, from ..\..\Qt\5.4\5.4\android_armv7\include\QtCore/QObject:1, from .build\moc\../../../../Users/nsantos/Dropbox/workspace/livkontrol/qt/livkontrol/LKBridgeBrowser.h:4,
                 from .build\moc\moc_LKBridgeBrowser.cpp:9:
..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h: In instantiation of 'constexpr int qMetaTypeId() [with T = BonjourRecord]': ..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h:1655:27: required from 'constexpr int qRegisterMetaType() [with T = BonjourRecord]'
.build\moc\moc_LKBridgeBrowser.cpp:138:85:   required from here
..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qglobal.h:684:47: error: static assertion failed: Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
                                               ^
..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h:1648:5: note: in expansion of macro 'Q_STATIC_ASSERT_X' Q_STATIC_ASSERT_X(QMetaTypeId2<T>::Defined, "Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system");
     ^
In file included from ..\..\Qt\5.4\5.4\android_armv7\include\QtCore/qobject.h:48:0, from ..\..\Qt\5.4\5.4\android_armv7\include\QtCore/QObject:1, from .build\moc\../../../../Users/nsantos/Dropbox/workspace/livkontrol/qt/livkontrol/LKBridgeBrowser.h:4,
                 from .build\moc\moc_LKBridgeBrowser.cpp:9:
..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h: In instantiation of 'static constexpr int QMetaTypeId2<T>::qt_metatype_id() [with T = BonjourRecord]': ..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h:1649:44: required from 'constexpr int qMetaTypeId() [with T = BonjourRecord]' ..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h:1655:27: required from 'constexpr int qRegisterMetaType() [with T = BonjourRecord]'
.build\moc\moc_LKBridgeBrowser.cpp:138:85:   required from here
..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h:1509:97: error: 'qt_metatype_id' is not a member of 'QMetaTypeId<BonjourRecord>' static inline Q_DECL_CONSTEXPR int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }
^
..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h:1509:100: error: body of constexpr function 'static constexpr int QMetaTypeId2<T>::qt_metatype_id() [with T = BonjourRecord]' not a return-statement static inline Q_DECL_CONSTEXPR int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }
^
..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h: In static member function 'static constexpr int QMetaTypeId2<T>::qt_metatype_id() [with T = BonjourRecord]': ..\..\Qt\5.4\5.4\android_armv7\include/QtCore/qmetatype.h:1509:100: warning: control reaches end of non-void function [-Wreturn-type] makefile:37868: recipe for target '.build\obj\moc_LKBridgeBrowser.obj' failed
mingw32-make: *** [.build\obj\moc_LKBridgeBrowser.obj] Error 1
18:47:48: The process "C:\Qt\5.4\Tools\mingw491_32\bin\mingw32-make.exe" exited with code 2. Error while building/deploying project livkontrol (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.4.0))
When executing step "Make"
18:47:48: Elapsed time: 00:03.

On 04/02/2015 18:36, Giuseppe D'Angelo wrote:
Il 04/02/2015 11:05, Nuno Santos ha scritto:
When compiling for Android, moc file as complaining about not having the implementation of the methods above which means that the preprocessor has passed over Q_OS_ANDROID, however, QtCreator had that area greyed out.

Could you please send the exact error you're having? I'm interested in who's complaining exactly about what.

It shouldn't be moc -- moc can't care less about who implements some slots. It could be the compiler (if you're defining member functions without declaring them, that is, you're missing the matching #ifndef in your .cpp files), or the linker (which would possibly mean that moc picked up those member functions and it's referencing them, but their symbols are not present in any object file)...

Thanks,


_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to