1. 建立一个console工程
QT -= guiCONFIG += c++ console
CONFIG -= app_bundle# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.SOURCES += \
main.cpp \
baseclass.cpp \
subclass.cpp# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetHEADERS += \
baseclass.h \
subclass.h
2. 添加baseClass
baseclass.h
#ifndef BASECLASS_H
#define BASECLASS_H#include "QObject"class baseClass: public QObject
{
Q_OBJECTpublic:
baseClass(QObject * p = );
virtual ~baseClass() {}signals:
void signal1();};#endif // BASECLASS_H
baseClass.cpp
#include "baseclass.h"baseClass::baseClass(QObject * p) : QObject(p)
{}
subclass.h
#ifndef SUBCLASS_H
#define SUBCLASS_H#include "baseclass.h"class subClass: public baseClass
{
Q_OBJECTpublic:
subClass(QObject * p = );
virtual ~subClass() {};//signals:
void signal2();};#endif // SUBCLASS_H
subclass.cpp
#include "subclass.h"subClass::subClass(QObject * p) : baseClass (p)
{}
main.cpp
#include <QCoreApplication>
#include "subclass.h"int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); subClass * sub = new subClass(); return a.exec();
}
编译报错:
testQtSignalBug/subclass.cpp:: error: undefined reference to `vtable for subClass'collect2: error: ld returned exit status
解决办法:注释掉subclass.h里的Q_OBJECT 宏
原因:未知