【发布时间】:2022-08-06 19:13:28
【问题描述】:
我想在 Windows 上使用 cmake 创建两个 QObject 库:ProA 和 ProB,其中 ProB 依赖于 ProA。
ProA 的代码如下所示:
class ProA_Export ProA: public QWidget
{
Q_OBJECT
public:
...
};
ProB 在 CMake 中链接 ProA:target_link_libraries(ProB ProA)。
然后,当我在 ProB 中#include \"ProA.h\" 时,它报告:
unresolved external symbol \"public: static struct QMetaObject const ProA::staticMetaObject\"
如果我从 ProA 中删除 Q_OBJECT,一切正常,除了 QT 的信号槽不起作用。
那么,如何解决Q_OBJECT引起的unresolved external symbol问题呢?
任何建议表示赞赏~~~
- - - - - - - - - - - 更新 - - - - - - - - - -
最后,我发现是connect 导致了问题。
我改变
connect(m_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(indexChangeSlot(int)));
至
connect(m_combobox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &ProA::indexChangeSlot)
然后,一切正常。另外,我觉得Q_OBJECT 是没有必要的。
希望它可以帮助某人。
-
可能没有生成对应的
moc_*文件。您可以尝试将set(CMAKE_AUTOMOC ON)添加到您的 cmake 脚本中。 -
哪个操作系统?动态库还是静态库?
-
@vahancho,@Wisblade,感谢您的热情回复。操作系统是win10,想生成动态库。 @vahancho,我在我的 cmake 脚本中添加了 set(CMAKE_AUTOMOC ON) 。而且,我可以在vs中看到mocs_compilation_Debug.cpp,mocs_compilation_Debug的内容是#include <EWIEGA46WW/moc_ProA.cpp>。我还在
build\\autogen\\include_Debug\\EWIEGA46WW\\moc_ProA.cpp中找到moc_ProA.cpp