Компиляция производного от QObject класса в командной строке в Linux

Я новичок в 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, но я не совсем уверен. Есть идеи?

2

Решение

Вы не используете мета-объектный компилятор, иначе. Мок, правильно.

У вас есть QObject в источнике, в отличие от заголовка, поэтому вместо включения заголовка в HEADERS переменная для qmake, вам нужно будет включить сгенерированный файл 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
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]