qt_add_ui

Fügt .ui-Dateien zu einem Ziel hinzu.

Der Befehl ist in der Widgets Komponente des Qt6 Pakets definiert. Laden Sie das Paket mit:

find_package(Qt6 REQUIRED COMPONENTS Widgets)

Synopsis

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

Wenn versionslose Befehle deaktiviert sind, verwenden Sie stattdessen qt6_add_ui(). Es unterstützt den gleichen Satz an Argumenten wie dieser Befehl.

Dieser Befehl wurde in Qt 6.8 eingeführt.

Beschreibung

Erzeugt Regeln für den Aufruf von User Interface Compiler (uic) auf den .ui Dateien. Für jede Eingabedatei wird eine Header-Datei im Build-Verzeichnis erzeugt. Die erzeugten Headerdateien werden zu den Quellen des Ziels hinzugefügt.

Argumente

TARGET

Das Argument TARGET gibt das CMake-Target an, zu dem die generierten Header-Dateien hinzugefügt werden sollen.

SOURCES

Das Argument SOURCES spezifiziert die Liste der zu verarbeitenden .ui Dateien.

INCLUDE_PREFIX

INCLUDE_PREFIX gibt das Include-Präfix für die erzeugten Header-Dateien an. Verwenden Sie denselben Include-Präfix wie in der Direktive #include in den Quelldateien. Wenn ui_<basename>.h ohne Präfix eingebunden wird, kann dieses Argument weggelassen werden.

OPTIONEN

Sie können zusätzliche OPTIONS setzen, die zu den Aufrufen von uic hinzugefügt werden sollen. Mögliche Optionen finden Sie in der uic-Dokumentation.

Beispiele

Ohne INCLUDE_PREFIX

Im folgenden Schnipsel schließt die Datei mainwindow.cpp ui_mainwindow.h und mainwindow.h ein.

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

CMakeLists.txt ist wie folgt implementiert und ruft qt_add_ui auf, um ui_mainwindow.h zum Ziel myapp hinzuzufügen.

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

Im obigen Beispiel wird ui_mainwindow.h ohne ein Präfix eingebunden. Das Argument INCLUDE_PREFIX wird also nicht angegeben.

Mit INCLUDE_PREFIX

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

Im obigen Ausschnitt schließt mainwindow.cpp ui_mainwindow.h mit einem Präfix ein.

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

Da ui_mainwindow.h mit einem Präfix eingeschlossen ist, wird das Argument INCLUDE_PREFIX im obigen Beispiel als src/files angegeben.

Mehrere .ui-Dateien

In den folgenden Ausschnitten schließen sowohl widget1.cpp als auch widget2.cpp ui_widget1.h bzw. ui_widget2.h ein.

widget1.cpp:

#include "src/files/ui_widget1.h"

widget2.cpp:

#include "src/files/ui_widget2.h"

Sowohl ui_widget1.h als auch ui_widget2.h sind mit demselben Präfix enthalten

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

In diesem Fall kann das Argument INCLUDE_PREFIX als src/files für beide Dateien im obigen Ausschnitt angegeben werden.

Wann sollte man qt_add_ui gegenüber AUTOUIC vorziehen?

qt_add_ui hat einige Vorteile gegenüber AUTOUIC:

  • qt_add_ui stellt sicher, dass die .ui Dateien während des ersten Builds für die Generatoren Ninja und Ninja Multi-Config korrekt erzeugt werden.
  • qt_add_ui garantiert, dass die erzeugten .h Dateien nicht außerhalb des Build-Verzeichnisses durchsickern.
  • Da qt_add_ui die Quelldateien nicht scannt, bietet es einen schnelleren Build als AUTOUIC.

Wann sollte man qt_add_ui gegenüber qt_wrap_ui bevorzugen?

qt_add_ui hat das Argument INCLUDE_PREFIX, das verwendet werden kann, um das Include-Präfix für die generierten Header-Dateien anzugeben.

Hinweis: Es wird nicht empfohlen, sowohl qt_add_ui als auch AUTOUIC für dasselbe Ziel zu verwenden.

Siehe auch 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.