我在OSX Lion中运行QtCreator,每当我创建一个需要Q_OBJECT宏的类时,我在尝试构建应用程序时都会遇到错误。该类的代码如下,我收到的错误也是如此。有什么线索吗?
注意:我已经尝试过清洁、运行qmake和重建,但都无济于事。
#ifndef TASKLIST_H
#define TASKLIST_H
#include <QObject>
class TaskList : public QObject
{
Q_OBJECT
public:
explicit TaskList(QObject *parent = 0 );
public slots:
void addTask();
void displayTasks();
};
#endif // TASKLIST_H
错误:
:-1:错误:找不到体系结构x86_64 的符号
:-1:错误:collect2:ld返回1退出状态
Qt Creator中似乎仍然存在一个错误。
我有一个大项目,有很多类都有Q_OBJECT,还有一些类没有Q_OBJECT。它运行良好。然而,如果我将Q_OBJECT添加到其中一个没有它的类中,我在尝试构建它时会收到"collect2:ld return 1 exit status"错误。
检查构建目录,我发现这个类的moc文件丢失了。Qt只是没有为它创建moc文件!但是,如果我从项目中删除头文件和cpp文件并再次添加它们,它就可以工作,生成moc文件,并成功构建项目。
这个问题似乎只有在我有一个没有Q_OBJECT的类并且它在过去成功构建的情况下才会发生。在添加"Q_OBJECT"之前从未编译过的具有Q_OBJECT。
因此,如果这个问题发生了,并且您确信您正确地包含了所有内容(并且注释掉Q_OBJECT可以正确地构建项目),请执行以下操作:
- 从项目中删除.h和.cpp文件(您刚刚在其中添加了Q_OBJECT)
- 再次将它们添加到项目中
- 清洁项目
- 重新构建它
编辑
在某些情况下,运行qmake
(构建/运行qmake)然后运行Clean All
就足够了。
tasklist.h文件
#ifndef TASKLIST_H
#define TASKLIST_H
#include <QObject>
class TaskList : public QObject
{
Q_OBJECT
public:
explicit TaskList(QObject *parent = 0 );
public slots:
void addTask(){};
void displayTasks(){};
};
#endif // TASKLIST_H
tasklist.cpp
#include "tasklist.h"
TaskList::TaskList(QObject *parent) :
QObject(parent)
{
}
main.cpp
#include <QtCore/QCoreApplication>
#include "tasklist.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TaskList t;
return a.exec();
}
工作正常,但它应该在单独的文件