作る問題必要があります。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で何を入力すればよいですか?
実際にあなたの.PROファイルに
DEPENDPATH += include
を追加してみてください、MainWindow.objはui_MainWindow.hではなくmoc_MainWindow.cppに依存する必要があります。 (moc_MainWindow.cppは別々にコンパイルされ、リンクステップでリンクされます。)いくつかの考え:1).proファイルにはTARGET行がありますか? 2)QT + =行に "core"と "gui"を追加する必要があるかもしれません。 – piccy@piccy:QTにgui core xml xmlpatternsが含まれていることを確認できます。 TARGET = app。 – Kivin
私はあなたがMac上でQt4.8.4を使用して見ている不要な動作を再現することはできません - 私は、標準のQtの例を見れば、例えば'examples/designer/calculatorform'のように、' UI_DIR'と 'INCLUDEPATH'指定を加えても期待通りに動作します。この標準的な例はあなたに適していますか?そうであれば、あなたは/から働くものがあります。 –