【问题标题】:Why is the Q_OBJECT macro causing issues (Qt)?为什么 Q_OBJECT 宏会导致问题 (Qt)?
【发布时间】:2012-02-14 04:24:01
【问题描述】:

我在 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 个退出状态

【问题讨论】:

  • @DmitryKachko 是的,它在一个单独的文件中
  • 在您的 .pro 文件中有 HEADERS += tasklist.h 吗?

标签: c++ qt osx-lion


【解决方案1】:

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 就足够了。

【讨论】:

  • 我遇到了这个确切的问题,并通过声明 Q_PROPERTY 并重建来修复它。 Q_PROPERTY 甚至在语法上都不正确。奇数
【解决方案2】:

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

任务列表.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();
}

工作正常,但它应该在单独的文件中

【讨论】:

  • 同样的问题,我就是这样设置的
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多