我在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退出状态
答案 0 :(得分:4)
Qt Creator似乎还有一个错误。
我有一个大型项目,其中包含许多具有Q_OBJECT的类和另一些没有Q_OBJECT的类。它工作正常。但是,如果我将Q_OBJECT添加到其中一个没有它的类中,那么在尝试构建它时会出现“collect2:ld返回1退出状态”错误。
检查构建目录,我看到缺少此类的moc文件。 Qt只是没有为它创建moc文件!但是,如果我从项目中删除头文件和cpp文件并再次添加它们,它会工作,生成moc文件并成功构建项目。
这个问题似乎只有在我有一个没有Q_OBJECT的类并且它在过去成功构建时才会发生。在添加“Q_OBJECT”之前从未编译过Q_OBJECT的新类总能正常工作。
因此,如果发生此问题并且您确定正确包含所有内容(并且注释掉Q_OBJECT以便正确构建项目),请执行以下操作:
修改强>
在某些情况下,运行qmake
(构建/运行qmake)后跟Clean All
就足够了。
答案 1 :(得分:0)
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();
}
工作正常,但它应该在单独的文件中