问题:当在Qt Designer中更改了QMainWindow或QDialog的相应.ui文件时,必须清理并重建整个项目才能使这些更改生效:make clean
然后make
.如果未首先清除项目,则更改将不会反映在可执行文件中.
项目结构:
./
project.pro
./include/
MainWindow.h
Main.h
./src/
MainWindow.cpp
Main.cpp
./ui/
MainWindow.ui
Run Code Online (Sandbox Code Playgroud)
资料来源:
MainWindow.h:
#include <QMainWindow>
#include "ui_MainWindow.h"
class MainWindow : public QMainWindow, private Ui::MainWindow
{
Q_OBJECT
public:
MainWindow();
};
Run Code Online (Sandbox Code Playgroud)
MainWindow.cpp:
#include "MainWindow.h"
MainWindow::MainWindow()
{
Ui::MainWindow::setupUi(this);
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
注意:包括警卫和班级成员因为简洁而被删除.
更新:
假设我们在Designer中编辑MainWindow.ui,保存并运行a make
,则执行以下shell命令(在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
Run Code Online (Sandbox Code Playgroud)
该uic
头生成器已运行,该窗口已moc'ed.尽管如此,可执行文件中的窗口保持不变.
更新#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
Run Code Online (Sandbox Code Playgroud)
答对了.MainWindow.obj
理所当然地取决于MainWindow.cpp
,但不是moc_MainWindow.cpp
.改变第一行来build\obj\MainWindow.obj: src\MainWindow.cpp build\moc\moc_MainWindow.cpp
纠正这个问题.
但是:下次我跑qmake
的时候会打扰我.我可以在qmake中键入什么来永久修复此问题?