为什么Q_OBJECT宏引起问题(Qt)?

fin*_*oop 4 c++ qt osx-lion

我在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
Run Code Online (Sandbox Code Playgroud)

错误:

:-1:错误:架构x86_64找不到符号

:-1:错误:collect2:ld返回1退出状态

vsz*_*vsz 5

Qt Creator中似乎仍然存在一个错误。

我有一个大型项目,其中许多类都具有Q_OBJECT,而另一些类中没有Q_OBJECT。工作正常。但是,如果我将Q_OBJECT添加到其中一个没有的类中,则在尝试构建它时会出现此“ collect2:ld返回1退出状态”错误。

检查构建目录,我发现缺少此类的moc文件。Qt只是不为其创建moc文件!但是,如果我从项目中删除了头文件和cpp文件,然后再次添加它们,则可以正常工作,将生成moc文件,并且可以成功构建项目。

仅当我有一个没有Q_OBJECT并且在过去成功构建的类时,才会出现此问题。在添加“ Q_OBJECT”之前从未编译过的带有Q_OBJECT的新类始终可以正常工作。

因此,如果发生此问题并且您确定自己正确地包含了所有内容(并注释掉Q_OBJECT可以正确构建项目),请执行以下操作:

  • 从项目中删除.h和.cpp文件(您刚刚在其中添加了Q_OBJECT的文件)。
  • 再次将它们添加到项目中
  • 清洁项目
  • 再次构建。

编辑

在某些情况下,先运行qmake(Build / Run qmake),然后再运行a Clean All就足够了。