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

时间:2014-01-07 12:40:26

标签: c++ qt qobject qtcore moc

我是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添加库,但我不太确定。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

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

请注意,您应该将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