c++ - 为什么 Q_OBJECT 宏会导致问题 (Qt)?

标签 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

错误:

:-1: error: symbol(s) not found for architecture x86_64

:-1: error: collect2: ld returned 1 exit status

最佳答案

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(构建/运行 qmake)后跟 Clean All 就足够了。

关于c++ - 为什么 Q_OBJECT 宏会导致问题 (Qt)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271679/

相关文章:

iphone - 升级到 OSX Lion 对于使用 Xcode 进行开发有任何注意事项吗?

c++ - QLabel高亮搜索词

qt - QML/Qt3D GeometryRenderer 使用的基本示例

Qt 模型替代方案

c++ - QT - 如何在 QLineEdit 上应用 QToolTip

cocoa - Lion全屏菜单栏不向下滑动

c++ - 社交网络 API 和 C/C++

c++ - 类中的while循环不会执行c++

c++ - 如何为引用参数定义模板函数和为指针参数定义相同的函数

xcode - 狮子错误地保留了焦点