修改.ui文件需要`make clean`

Jes*_*lam 6 c++ qt

问题:当在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中键入什么来永久修复此问题?

小智 0

我相信你的 UI_DIR 应该设置为 ui,而不是 include。