簡體   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