c++ - 修改 .ui 文件需要一个 `make clean`

标签 c++ qt

问题:当 QMainWindow 或 QDialog 的相应 .ui 文件在 Qt Designer 中被更改时,必须清理并重建整个项目以使这些更改生效:make clean 然后 make。如果不首先清理项目,则更改不会反射(reflect)在可执行文件中。

项目结构:

./
    project.pro
./include/
    MainWindow.h
    Main.h
./src/
    MainWindow.cpp
    Main.cpp
./ui/
    MainWindow.ui

来源:

主窗口.h:

#include <QMainWindow>
#include "ui_MainWindow.h"

class MainWindow : public QMainWindow, private Ui::MainWindow
{
    Q_OBJECT
    public:

    MainWindow();
};

主窗口.cpp:

#include "MainWindow.h"

MainWindow::MainWindow()
{
    Ui::MainWindow::setupUi(this);
}

项目.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

注意:为了简洁起见,包括 guard 和类(class)成员已被删除。

更新:

假设我们在 Designer 中编辑 MainWindow.ui,保存它,然后运行 ​​make,将执行以下 shell 命令(在 Windows 平台上;同样的命令也在 'nix box 上执行):

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 header 生成器已运行,窗口已被移动。尽管如此,窗口在可执行文件中保持不变。

更新#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 中输入什么来永久修复这个问题?

最佳答案

我认为您的 UI_DIR 应该设置为 ui,而不是 include。

关于c++ - 修改 .ui 文件需要一个 `make clean`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886987/

相关文章:

QT : header in . 用户界面文件

Qt + xapian 库

c++ - 使用 QTCreator 的 Debug模式禁用优化

c++ - 如何在 QSqlTableModel 和 Q_OBJECT 之间不发生冲突的情况下构建我的类?

c++ - 在 C++ 中重写 << 运算符时如何正确遵守 std::setw 和 std::fill

c++ - 如何为 std::variant 赋值?

C++ 和 JMS - 如何连接两者?

c++ - ubuntu 上的 opengl 和 SDL 编译

c++ - 模板重载解析和隐式转换

c++ - Qt 第 3 方库静态链接 (QtSerialPort)