[英]Qt “signal undefined reference error” after inheriting from QObject
我最近需要向类添加一个信号,所以我将类更改为继承自QObject并将Q_OBJECT宏添加到类定义中。 由于这样做,我在下面的类别行中得到“vtable for CLICommand'的信号未定义引用错误”错误:
// File clicommand.h
#include <QString>
#include <QStringList>
#include <QTcpSocket>
#include "telnetthread.h"
class CLICommand : public QObject
{
Q_OBJECT
public:
CLICommand(TelnetThread *parentTelnetThread);
signals:
void signal_shutdown_request();
private:
TelnetThread *m_parentTelnetThread;
以及第二个错误“在'vtable for CLICommand''的信号未定义的引用错误”在下面的行上(初始化成员变量):
// File clicommand.cpp
#include <QDebug>
#include <QTcpSocket>
#include <QTextStream>
#include "version.h"
#include "clicommand.h"
#include "telnetthread.h"
#include "logger.h"
CLICommand::CLICommand(TelnetThread *parentTelnetThread)
: m_parentTelnetThread(parentTelnetThread)
{
}
就在这里我发出信号的地方。 emit行生成对`CLICommand :: signal_shutdown_request()'的错误未定义引用 :
// file shutdown_clicommand.cpp
#include <QIODevice>
#include "clicommand.h"
#include "logger.h"
#include "version.h"
void CLICommand::execute_shutdown(const QStringList &commandLineFragments)
{
emit signal_shutdown_request();
}
我已经阅读了关于这个主题的一些帖子,但似乎都没有适用。 我甚至尝试过清洁/重建。 我没有使用boost或其他库...只是QT 5
有人能告诉我我做错了什么吗?
解决方案:在QT Creator中,右键单击项目,选择RUN QMAKE,然后重建所有项目。 关于运行REBUILD ALL的其他帖子是不正确的......它本身就不会运行qmake。
您需要确保(重新)运行“moc”以进行这些更改。 您似乎错过了生成的moc文件,或者它已过时,因此不包含对当前状态的正确引用。
添加Q_OBJECT宏时,QtCreator不会正确重新运行qmake
。 这是一个长期存在的问题,因此您需要手动重新运行它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.