我需要捕获来自QProcess的发出信号以进行测试。
由于我使用的是控制台应用程序,因此我决定在main.cpp文件中创建一个名为myObj
的文件,主要使用this example:
#include <QCoreApplication>
#include <QLoggingCategory>
#include <QTextStream>
#include <QProcess>
#include <QString>
#include <QVariant>
#include <QDebug>
#include <QObject>
class myObj : public QObject
{
Q_OBJECT
public:
myObj(QObject *parent = 0);
// virtual ~Communicate();
~myObj();
public slots:
void registerFinished(int signal);
void registerAboutToClose();
void registerChannelReadyRead(int signal);
void registerReadChannelFinished();
void registerReadyRead();
void registerReadyReadStandardOutput();
void registerStarted();
};
myObj::myObj(QObject *parent)
: QObject(parent) <--- LINE 72 Error
{
}
//virtual myObj::~Communicate(){
//}
myObj::~myObj(){ <--- LINE 81 Error
}
void myObj::registerFinished(int signal){
qDebug() << "exit code = " << QString::number(signal);
}
void myObj::registerAboutToClose(){
qDebug() << "aboutToClose";
}
void myObj::registerChannelReadyRead(int signal){
qDebug() << "channelReadyRead = " << QString::number(signal);
}
void myObj::registerReadChannelFinished(){
qDebug() << "readChannelFinished";
}
void myObj::registerReadyRead(){
qDebug() << "exit code";
}
void myObj::registerReadyReadStandardOutput(){
qDebug() << "exit code";
}
void myObj::registerStarted(){
qDebug() << "started";
}
myObj *myO;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
myO = new myObj();
//....
}
问题:
main.cpp:72:错误:未定义引用`vtable for myObj&#39;
main.cpp:81:错误:未定义引用`vtable for myObj&#39;
我查看过多个SO页面,例如here和here以及here以及其他各种页面,但尚未找到解决方案
我已经尝试过/已完成:
.pro文件
QT += core
QT -= gui
CONFIG += c++11
TARGET = serv_app
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
有什么建议吗?
答案 0 :(得分:3)
您有两种选择:
#include "main.moc"
功能之前或之后添加行main()
。当您将类放入自己的头文件时,qmake
将生成正确的moc
文件。
但是,当您将该类放入.cpp
文件时,除非您输入我之前说过的行,否则不会生成moc
代码。
更新#1
在Qt tutorial about writing a Unit Test中,我们可以找到以下信息:
注意,如果我们的声明和执行都是我们的测试 class在.cpp文件中,我们还需要包含生成的moc 文件使Qt的内省工作。
所以这是我们需要包含moc
文件的另一个例子。