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 中引入。

说明

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

参数

目标

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

源代码

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

INCLUDE_PREFIX

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

选项

您可以在uic 调用中设置额外的OPTIONS 。您可以在uic 文档中找到可能的选项。

示例

不包含 INCLUDE_PREFIX

在以下代码段中,mainwindow.cpp 文件包含ui_mainwindow.hmainwindow.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.cppwidget2.cpp 分别包含ui_widget1.hui_widget2.h

widget1.cpp:

#include "src/files/ui_widget1.h"

widget2.cpp:

#include "src/files/ui_widget2.h"

ui_widget1.hui_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_uiAUTOUIC 更有优势:

  • 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_uiAUTOUIC

另请参阅 qt_wrap_ui

© 2025 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.