Linux 命令行编译 QObject 派生类

use*_*022 2 c++ qt moc qobject qtcore

我是 Qt 的新手。我正在尝试编译如下所示的小代码片段:

#include<QtCore/QtCore>
#include<QtCore/QObject>

class Test:public QObject
{
  Q_OBJECT
  public:
  Test(){qDebug()<<"CTOR";}
};

int main()
{
Test t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下命令通过命令行运行它:

g++ -o signalTest.exe -l QtCore signalTest.cpp
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

undefined reference to vtable for Test
Run Code Online (Sandbox Code Playgroud)

我想我需要包含 的库QObject,但我不确定。有任何想法吗?

lpa*_*app 5

您没有使用元对象编译器,也就是。moc,正确的。

您在源代码中有一个 QObject 而不是标题,因此HEADERS您需要在源代码中包含生成的 moc 文件,而不是将标题包含到qmake的变量中,如下所示。

请注意,您应该将 Q_OBJECT 宏添加到 Q_OBJECT 中,因为它提供了可用的属性、信号和槽。这不是解决此问题所必需的,但如果您知道这一点会更好。

主程序

#include<QtCore/QtCore>
#include<QtCore/QObject>

class Test:public QObject
{
  Q_OBJECT
  public:
  Test(){qDebug()<<"CTOR";}
};

#include "main.moc" // <----- This will make it work

int main()
{
Test t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

主程序

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)

构建和运行

qmake && make
Run Code Online (Sandbox Code Playgroud)