問題: 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 に何を入力すればよいですか?