0

我目前正在将我的应用程序从 Qt4.8 移植到 Qt5.6

一些用于编译和链接的代码现在停止正确链接。我把它缩小到调用qRegisterMetaType<MyClass*>MyClass* 从 QObject 继承的地方。

MyClass 在单独的插件中定义和实现。因此,在这种情况下,我只是将“MyClass.h”包括在内,其中我有一个Q_DECLARE_METATYPE(MyClass*)

它曾经与 Qt4.8 完美配合,但与 Qt5.6 配合使用,但现在无法链接:

error LNK2001: unresolved external symbol "public: static struct QMetaObject const MyClass::staticMetaObject"

Qt5 发生了什么变化?我做错了吗?

4

1 回答 1

1

迟到总比没有好,答案确实是使用上面评论中提到的宏。手册中或多或少地解释了int qRegisterMetaType(const char *typeName)

此函数要求 T 在调用函数时是完全定义的类型。对于指针类型,它还要求完全定义指向的类型。使用 Q_DECLARE_OPAQUE_POINTER() 能够注册指针以转发声明的类型。

于 2019-09-08T14:33:01.703 回答