3

首先,我知道还有其他帖子在谈论这个错误,但我认为我的有点不同。

我有一个带有这个 pro 文件的 Qt 项目:

QT       += core
QT       += network
QT       -= gui

TARGET = QDownloaderCLI

CONFIG   += console
CONFIG   -= app_bundle


TEMPLATE ...

我试过了,CONFIG -= X86_64但没有任何改变。

在网上搜索我发现了一些奇怪的东西,我有一个带有公共插槽的 .h 文件,他的实现在 .cpp 文件中:

public slots:
    void stateChanged(int state);

有了这个,我收到了错误消息,但如果我void stateChanged(int state);在 .h 和 .cpp 中发表评论,它就可以工作。

我该如何解决 ?

我也有警告:

directory not found for option '-F/Applications/Qt//5.1.0/clang_64/qtbase/lib'

"This version of OS X is unsupported" [-W#warnings]

我也尝试过“运行 qMake”,但我也收到了警告:

No .qmake.cache is present. This significantly slows down qmake with this makespec.
Call 'cache()' in the top-level project file to rectify this problem.

我在带有 Qt 5.1.0 的 Mac OS X 10.8.4

我的 .h 文件的代码:

#ifndef DOWNLOADER_H
#define DOWNLOADER_H

#include <QObject>
#include <QDebug>
#include <QFile>
// In Qt 5 no more QHttp
#include <QNetworkAccessManager>

class downloader : public QObject
{
    Q_OBJECT
public:
    explicit downloader(QObject *parent = 0);
    void doDownload();

signals:

public slots:
    void stateChanged(int state);

private:
   QNetworkAccessManager *http;

};

#endif // DOWNLOADER_H
4

3 回答 3

2

您需要提供编译输出,以便我们为您提供帮助,现在您只向我们提供了问题输出中的警告。

当我在 OSX 上遇到参考错误时,我通常会收到此错误。即当我在我的.h 文件中声明了一个函数然后没有声明它时。

您是否测试过将 stateChanged 函数移动为公共而不是插槽?

当您尝试通过右键单击 .cpp 文件中的函数并选择光标下的跟随符号来跟踪该函数时会发生什么。

如果 .cpp 和 .h 文件之间的连接错误,您将在此处收到错误消息。您也可以尝试在 .h 文件中声明该函数来测试它。

您收到的警告是您始终收到的警告,它不应使应用程序无法运行。我每次运行应用程序时都会得到它。

请提供编译输出。

问候 /RK

于 2013-07-23T13:10:20.963 回答
0

未找到的路径对吗?在我的Makefile,我有:

LIBS          = $(SUBLIBS) -F/Users/enrico/Qt5.0.1/5.0.1/clang_64/lib -framework QtWidgets -F/Users/enrico/Qt5.0.1/5.0.1/clang_64/qtbase/lib -framework QtGui -framework QtCore -framework OpenGL -framework AGL 

错误信息是void stateChanged(int state);什么?

于 2013-07-19T21:51:27.553 回答
0

您的 .h 文件应在链接阶段之前编译为 *.moc。如果您未找到的符号是stateChanged那是您缺少的步骤。当您进入链接阶段时,没有找到 QObject 插槽作为符号并且您的链接器停止处理。

或者它可能缺少一些 QT 密钥/宏来正确声明为 QObject。

查看Qt5 help for moc中的详细信息

于 2013-07-22T08:00:05.463 回答