首先,我知道还有其他帖子在谈论这个bug,但我认为我的帖子有点不同。
我有一个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);
有了这个,我得到了错误消息,但如果我在.h和.cpp中注释void stateChanged(int state);
,它就可以工作了。
我该如何解决这个问题?
我也有警告:
directory not found for option '-F/Applications/Qt//5.1.0/clang_64/qtbase/lib'
和
"This version of OS X is unsupported" [-W#warnings]
我也试过"Run 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.
我在Mac OS X 10.8.4上使用Qt 5.1.0
我的.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
您需要提供编译输出,以便我们能够帮助您,目前您只向我们发出了问题输出中的警告。
当我在OSX上有一个参考错误时,我通常会得到这个错误。即,当我在.h文件中声明了一个函数,但还没有声明它时。
您是否测试过将stateChanged函数移动为public而不是slot?
当您试图通过右键单击.cpp文件中的函数并选择光标下的follow符号来跟随该函数时会发生什么。
如果.cpp和.h文件之间的连接错误,则会出现错误。您也可以尝试在.h文件中声明函数来测试它。
你收到的警告是你一直收到的警告,它不应该使应用程序无法运行。我每次运行应用程序都会得到它。
请提供编译输出。
问候/RK
未找到的路径是否正确?在我的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);
的错误消息是什么?
在链接阶段之前,您的.h文件应编译为*.moc。如果您的未找到符号是stateChanged,那就是您缺少的步骤。当您进入链接阶段时,没有找到作为符号的QObject插槽,并且您的链接器停止处理。
或者,它可能缺少一些QT关键字/宏,无法正确地声明为QObject。
查看moc 的Qt5帮助中的详细信息