3

まず第一に、このバグについて話している他の投稿があることは知っていますが、私のものは少し違うと思います.

このproファイルを使用したQtプロジェクトがあります:

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

TARGET = QDownloaderCLI

CONFIG   += console
CONFIG   -= app_bundle


TEMPLATE ...

で試しましCONFIG -= X86_64たが、何も変わりません。

Web で検索すると、何か奇妙なことがわかりました。.cpp ファイルに実装されたパブリック スロットを含む .h ファイルがあります。

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]

「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.

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 関数をスロットではなく public に移動することをテストしましたか?

.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 スロットが見つからず、リンカーは処理を停止します。

または、QObject として適切に宣言される QT キーワーク/マクロが不足している可能性があります。

moc の Qt5 ヘルプで詳細を確認してください。

于 2013-07-22T08:00:05.463 に答える