繁体   English   中英

C ++ / Qt Q_OBJECT宏导致错误

[英]C++/Qt Q_OBJECT macro causes an error

我刚刚开始在Qt框架中编程。 以下是一个非常简单的程序:

#include <QtCore/QCoreApplication>
#include <QDebug>

class MyClass : public QObject
 {
     Q_OBJECT

 public:
     MyClass() {}
 };

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyClass *c = new MyClass();
    return a.exec();
}

但是当我尝试编译并运行它时,我收到以下错误:
在函数MyClass
vtable for MyClass未定义引用
但是当我删除QObject宏时,一切正常。 请注意,该类与main函数在同一文件中定义。
我正在使用Qt 4.7版,在Win 7上运行。
是什么导致了这个问题?

更新:当我在一个单独的头文件中定义我的类时,我得到相同的错误。 mytimer.h:

#ifndef MYTIMER_H
#define MYTIMER_H
#include <QtCore>

class MyTimer : public QObject
{
    Q_OBJECT

public:
    QTimer *timer;
    MyTimer();
public slots:
    void DisplayMessage();
};


#endif // MYTIMER_H

mytimer.cpp:

#include "mytimer.h"
#include <QtCore>

MyTimer::MyTimer()
{
    timer = new QTimer();
    connect(timer,SIGNAL(timeout()),this,SLOT(DisplayMessage()));

    timer->start(1000);
}

void MyTimer::DisplayMessage()
{
    qDebug() << "timed out";
}

这是main.cpp:

#include <QtCore/QCoreApplication>
#include <QDebug>
#include "mytimer.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyTimer *mt = new MyTimer();
    return a.exec();
}

您需要使用qmake编译它,它将为您的自定义QObject类创建模拟方法。 有关生成moc文件的更多信息,请参见此处

由于您的示例不包含头文件,因此不会对其进行解析,也不会生成moc文件。 您需要在单独的头文件中声明MyClass,并运行moc生成工具。

当您使用QT Creator时,您应该清理项目并在构建菜单中执行qmake。

每当你应用一些更改时首先清理你的项目,然后运行qmake,最后构建你的项目......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM