带有 Qt 对象的 Cmake 库

Cmake Library With Qt Object?

本文关键字:Cmake 对象 Qt 带有      更新时间:2023-10-16

我正在尝试创建一个共享库,我的其他Qt项目可以使用。在库中,我有一个类似于这样的类:

A.h
class A : public QWidget
{
    Q_OBJECT
public:
    A(QWidget *parent = 0);
    ~A();
protected:
    void overriddenQtFunc() Q_DECL_OVERRIDE; // Overriding a QtWidget function.
    // other variables and functions here...
}
A.cpp
A::A(QWidget *parent):QWidget(parent){}
A::~A(){}
void A::overriddenQtFunc(){  // Custom implementation here...  }
// Other function implementations.

我的库 Cmake 如下所示:

cmake_minimum_required(VERSION 3.0.2)
set(LIB_NAME "TestLib")
find_package(QT5Widgets)
include_directories("includes") # Where my A.h file lives along with
                                # my other custom library code.
set(SRCS # Source list here)
set(HDRS # Header list here)
add_library(${LIB_NAME} ${SRCS} ${HDRS})
target_include_directories(${LIB_NAME} PRIVATE ${Qt5Widgets_INCLUDE_DIRS})
target_include_directories(${LIB_NAME} PUBLIC "includes")

当我将"Q_OBJECT"与我的覆盖方法一起从类中删除时,一切都可以编译和工作正常。否则,当我想和他们一起编译时,我会得到

LNK2001: unresolved external symbol "protected: virtual void __thiscall A::overriddenQtFunc(void)"

我还需要做些什么来让它正确链接吗?这与我的消息来源没有被"moc"ed有关吗?

试试这个

set(CMAKE_AUTOMOC ON)