我刚刚开始在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();
}
答案 0 :(得分:4)
您需要使用qmake编译它,它将为您的自定义QObject类创建模拟方法。有关生成moc文件的更多信息,请参阅here。
由于您的示例不包含头文件,因此不会对其进行解析,也不会生成moc文件。您需要在单独的头文件中声明MyClass,并运行moc生成工具。
答案 1 :(得分:1)
当您使用QT Creator时,您应该清理项目并在构建菜单中执行qmake。
答案 2 :(得分:1)
每当您应用某些更改时,首先清理项目,然后运行qmake,最后构建项目...