在Linux上的命令行上编译QObject派生类



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

#include<QtCore/QtCore>
#include<QtCore/QObject>
class Test:public QObject
{
Q_OBJECT
public:
Test(){qDebug()<<"CTOR";}
};
int main()
{
Test t;
return 0;
}

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

g++ -o signalTest.exe -l QtCore signalTest.cpp

然而,我得到了以下错误:

undefined reference to vtable for Test

我想我需要包括QObject的库,但我真的不确定。有什么想法吗?

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

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

请注意,通常情况下,您应该将Q_OBJECT宏添加到您的Q_OBJECT中,因为它具有可用的属性、信号和插槽。这对于解决这个问题来说并不是绝对必要的,但如果你意识到这一点,那就更好了。

main.cpp

#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;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make

最新更新