本页内容

qt_add_ui

将 .ui 文件添加到目标中。

该命令定义在Qt6 包的Widgets 组件中。使用以下命令加载该包:

find_package(Qt6 REQUIRED COMPONENTS Widgets)

用法

qt_add_ui(<TARGET>
          SOURCES file1.ui [file2.ui ...]
          [INCLUDE_PREFIX <PREFIX>]
          [OPTIONS ...])

如果禁用了无版本号的命令,请改用qt6_add_ui() 。它支持与本命令相同的参数集。

该命令于 Qt 6.8 中引入。

描述

为调用User Interface Compiler (uic)处理.ui 文件创建规则。对于每个输入文件,都会在构建目录中生成一个头文件。生成的头文件将被添加到目标的源文件中。

参数

TARGET

TARGET 参数指定将生成的头文件添加到的 CMake 目标。

SOURCES

SOURCES 参数指定待处理的.ui 文件列表。

INCLUDE_PREFIX

INCLUDE_PREFIX 指定生成的头文件的包含前缀。请使用与源文件中#include 指令中相同的包含前缀。如果ui_<basename>.h 在未指定前缀的情况下被包含,则可以省略此参数。

选项

您可以设置应添加到uic 调用中的额外OPTIONS 。可在uic文档中查阅可用选项。

示例

不使用 INCLUDE_PREFIX

在下面的代码片段中,mainwindow.cpp 文件包含ui_mainwindow.h 和mainwindow.h 。

#include "mainwindow.h"
#include "ui_mainwindow.h"

CMakeLists.txt 的实现如下,它调用qt_add_ui 来将ui_mainwindow.h 添加到myapp 目标中。

qt_add_executable(myapp mainwindow.cpp main.cpp)
qt_add_ui(myapp SOURCES mainwindow.ui)

在上例中,ui_mainwindow.h 是在未指定前缀的情况下被包含的。因此未指定INCLUDE_PREFIX 参数。

使用 INCLUDE_PREFIX

#include "mainwindow.h"
#include "src/files/ui_mainwindow.h"

在上面的代码片段中,mainwindow.cpp 带前缀地引入了ui_mainwindow.h 。

qt_add_executable(myapp mainwindow.cpp main.cpp)
qt_add_ui(myapp INCLUDE_PREFIX "src/files" SOURCES mainwindow.ui)

由于ui_mainwindow.h 是带前缀包含的,因此在上例中,INCLUDE_PREFIX 参数被指定为src/files 。

多个 .ui 文件

在以下代码片段中,widget1.cpp 和widget2.cpp 分别包含ui_widget1.h 和ui_widget2.h 。

widget1.cpp:

#include "src/files/ui_widget1.h"

widget2.cpp:

#include "src/files/ui_widget2.h"

ui_widget1.h 和ui_widget2.h 均使用相同的前缀进行包含

qt_add_executable(myapp widget1.cpp widget2.cpp main.cpp)
qt_add_ui(myapp INCLUDE_PREFIX "src/files" SOURCES widget1.ui widget2.ui)

在这种情况下,对于上述代码片段中的这两个文件,INCLUDE_PREFIX 参数均可指定为src/files 。

何时应优先使用qt_add_ui 而不是AUTOUIC ?

qt_add_ui 相较于AUTOUIC 具有以下优势:

  • qt_add_ui 确保在首次构建时,针对Ninja 和Ninja Multi-Config 生成器,.ui 文件能正确生成。
  • qt_add_ui 保证生成的.h 文件不会泄露到构建目录之外。
  • 由于qt_add_ui 不扫描源文件,因此其构建速度比AUTOUIC 更快。

何时应优先使用qt_add_ui 而不是qt_wrap_ui ?

qt_add_ui 具有INCLUDE_PREFIX 参数,可用于指定生成的头文件的包含前缀。

注意:不建议 对同一个目标同时使用qt_add_ui 和AUTOUIC。

另请参阅 qt_wrap_ui()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.