2013-02-15 8 views
6

作る問題必要があります。QMainWindowまたはQDialogの対応する.uiファイルは、Qtのデザイナーに変更された場合は、プロジェクト全体では、これらの変更を有効にするために洗浄して再構築する必要があります:make clean、次にmake。プロジェクトが最初にクリーニングされない場合、変更は実行可能ファイルに反映されません。.uiファイルを変更すると、 `clean`

プロジェクト構造

./ 
    project.pro 
./include/ 
    MainWindow.h 
    Main.h 
./src/ 
    MainWindow.cpp 
    Main.cpp 
./ui/ 
    MainWindow.ui 

出典

MainWindow.h:

#include <QMainWindow> 
#include "ui_MainWindow.h" 

class MainWindow : public QMainWindow, private Ui::MainWindow 
{ 
    Q_OBJECT 
    public: 

    MainWindow(); 
}; 

MainWindow.cpp:

#include "MainWindow.h" 

MainWindow::MainWindow() 
{ 
    Ui::MainWindow::setupUi(this); 
} 

project.pro:

TEMPLATE = app 
CONFIG -= debug release 
CONFIG += qt debug_and_release warn_on incremental flat link_prl embed_manifest_dll embed_manifest_exe 
QT += xml xmlpatterns 

INCLUDEPATH += include/ 
UI_DIR = include/ 

FORMS += ui/MainWindow.ui 
HEADERS += include/MainWindow.h include/Main.h 
SOURCES += src/MainWindow.cpp src/Main.cpp 

注:警備員とクラスメンバーは、簡潔さのために取り除かれている含めます。

更新:私たちは、デザイナーでMainWindow.uiを編集して保存し、makeを実行すると仮定すると

、次のシェルコマンドはWindowsプラットフォーム上で(実行されます。同じコマンドが「nixの上で実行されています)あまりにボックス:

QTDIR\bin\uic.exe ui\MainWindow.ui -o include\ui_MainWindow.h 
QTDIR\bin\moc.exe ... include\MainWindow.h -o build\moc\moc_MainWindow.cpp 
MSVS\bin\cl.exe /c ... -Fobuild\obj\ moc_MainWindow.cpp 
MSVS\bin\link.exe ... /OUT:bin\target.exe 

uicヘッダ生成が実行され、ウィンドウがmoc'edされています。それにもかかわらず、ウィンドウは実行可能ファイル内で変更されません。

更新#2

####### Compile 

build\obj\MainWindow.obj: src\MainWindow.cpp 

build\obj\main.obj: src\main.cpp 

build\obj\moc_MainWindow.obj: build\moc\moc_MainWindow.cpp 

ビンゴ:

私はMakefileのこれらの行を見つけました。 MainWindow.objは正当にはMainWindow.cppに依存しますが、moc_MainWindow.cppには依存しません。最初の行をbuild\obj\MainWindow.obj: src\MainWindow.cpp build\moc\moc_MainWindow.cppに変更すると、この問題全体が修正されました。

:次回にqmakeを実行すると、それは不快になります。これを永続的に修正するには、qmakeで何を入力すればよいですか?

+0

実際にあなたの.PROファイルにDEPENDPATH += includeを追加してみてください、MainWindow.objはui_MainWindow.hではなくmoc_MainWindow.cppに依存する必要があります。 (moc_MainWindow.cppは別々にコンパイルされ、リンクステップでリンクされます。)いくつかの考え:1).proファイルにはTARGET行がありますか? 2)QT + =行に "core"と "gui"を追加する必要があるかもしれません。 – piccy

+0

@piccy:QTにgui core xml xmlpatternsが含まれていることを確認できます。 TARGET = app。 – Kivin

+0

私はあなたがMac上でQt4.8.4を使用して見ている不要な動作を再現することはできません - 私は、標準のQtの例を見れば、例えば'examples/designer/calculatorform'のように、' UI_DIR'と 'INCLUDEPATH'指定を加えても期待通りに動作します。この標準的な例はあなたに適していますか?そうであれば、あなたは/から働くものがあります。 –

答えて

0

あなたのUI_DIRは、含めないでuiに設定する必要があります。

+0

Qtのドキュメントにその証拠はありません。 – Kivin

0

configから「release」と「debug」の両方を削除してから、「debug_and_release」という設定を追加すると面白いです。 debug_and_releaseを実行すると、両方の構成が追加されますが、CONFIGでその順序が入れ替わります。

あなたが見ている依存関係の問題を引き起こすようなことはありませんが、私が心配している限り試してみる価値があります。

ところで、あなたはいつでもあなたのMakefileを吹き飛ばすことなくqmakeを試すことができます。 "qmake -o Makefile.foo"を実行するだけで、別のファイルに保存されます。

+0

私はそれを1日か2日で試してみて、何が起こるか見てみましょう。私はちょうどこれで生きることを学びました。それは1年以上にわたって起こっていました。設定からリリースとデバッグをクリアするとして...私はドキュメントが見事に悪いモードを、構築に関しては除いて、非常に良いqmakeのドキュメントを見つけました。私は、正確な問題を覚えていないが、私はその時点での正確な問題を覚えていませんがqmakeのは、何かについて幸せになるために得るためには、かなり長い間戻ってそれらをクリアする必要がありました。 – Kivin

0

私はしばらくの間、このような問題に苦しんとDEPENDPATHが生成されたファイル/プロジェクトのヘッダーですべてのディレクトリを指すように必要、ということが判明しました。それ以外の場合、qmakeはヘッダをスキップしてMakefileに依存関係を生成することがあります。

関連する問題