6

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

プロジェクト構造

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

注: インクルード ガードとクラス メンバーは簡潔にするために削除されています。

更新

Designer で 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ヘッダー ジェネレーターが実行され、ウィンドウがモック化されました。それにもかかわらず、ウィンドウは実行可能ファイルで変更されません。

更新#2

Makefile で次の行を見つけました。

####### 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 

ビンゴ。MainWindow.obj当然、 に依存しますが、 には依存しMainWindow.cppませんmoc_MainWindow.cpp。最初の行を変更して、build\obj\MainWindow.obj: src\MainWindow.cpp build\moc\moc_MainWindow.cppこの問題全体を修正しました。

ただし、次回実行するqmakeと、問題が発生します。これを永久に修正するには、qmake に何を入力すればよいですか?

4

3 に答える 3

0

構成から「release」と「debug」の両方を削除してから、「debug_and_release」を構成に追加するのは興味深いことです。debug_and_release を実行すると、これらの構成が両方とも追加されますが、CONFIG での順序が入れ替わります。

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

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

于 2013-05-07T15:12:48.637 に答える
0

私はしばらくの間、このような問題に苦労してきましたが、DEPENDPATHすべてのディレクトリを生成されたファイル/プロジェクト ヘッダーでポイントする必要があることがわかりました。そうしないと、qmake は Makefile で依存関係を生成するときに一部のヘッダーをスキップする可能性があります。DEPENDPATH += include.pro ファイルに追加してみてください

于 2016-03-29T13:56:01.997 に答える
0

UI_DIR は、include ではなく ui に設定する必要があると思います。

于 2013-03-01T16:08:59.600 に答える