Der Datentyp-Generator von „ Qt OPC UA “
Ab Qt 6.7 enthält „ Qt OPC UA “ einen Datentyp-Generator namens „ qopcuaxmldatatypes2cpp “, der aus Enums und strukturierten Typen in .bsd-Dateien „ Qt OPC UA “-kompatible C++-Enumerationen und Datenklassen generiert. Als sekundäre Funktion werden Knoten-ID-Enums aus CSV-Dateien generiert.
Der Generator ist ein Befehlszeilentool, das über die folgenden Argumente gesteuert werden kann:
| Lang | Kurz | Zweck |
|---|---|---|
| --input | -i | Eine .bsd-Datei, für die alle enthaltenen Enum- und Strukturtypen generiert werden. Kann mehrfach verwendet werden, um Code für mehrere Modelle zu generieren. |
| --dependencyinput | -d | Eine .bsd-Datei mit Abhängigkeiten, in der nur die Typen generiert werden, die von einer Struktur aus einer über --input übergebenen Eingabedatei benötigt werden. Kann mehrfach verwendet werden, um Modelle mit Abhängigkeiten zu mehreren anderen Modellen zu berücksichtigen. |
| --nodeids | -n | Ein Name und der Pfad zu einer .csv-Datei mit Knoten-IDs, für die eine Enumeration generiert werden soll, z. B. MyModel:/path/to/nodeids.csv => Enumerationsklasse MyModelNodeId. Kann mehrfach angegeben werden. |
| --output | -o | Das Ausgabeverzeichnis, in dem die generierten Dateien abgelegt werden. |
| --prefix | -p | Das Präfix für die Namen der generierten Dateien, Enums und Klassen. Der Standardwert lautet „ GeneratedOpcUa “. |
| --bundle | -b | Erzeugt die Bundle-Dateien <prefix>datatypes.h und <prefix>datatypes.cpp, die alle generierten Dateien mit #include einbinden |
Bei jedem Durchlauf werden folgende Dateien generiert:
- Eine Datei „ .h “, die einen Namespace mit allen Aufzählungstypen enthält
- Je eine Datei „ .h “ und „ .cpp “ für jeden strukturierten Typ
- Eine „ .h “- und eine „ .cpp “-Datei, die Kodierungs- und Dekodierungsmethoden enthalten
- Eine „ .h “-Datei, die die Knoten-ID-Enumerationen enthält, sofern -n mindestens einmal angegeben wurde
- Die Bundle-Dateien <prefix>datatypes.h und <prefix>datatypes.cpp, wenn -b angegeben wird
CMake-Integration
Die Funktion qt_opcua_generate_datatypes() nimmt eine oder mehrere Eingabe -BSD -Dateien sowie alle erforderlichen abhängigen BSD -Dateien entgegen und ruft qopcuaxmldatatypes2cpp auf. Die generierten Quell- und Header-Dateien werden in OUTPUT_DIR geschrieben und dem als erstes Argument angegebenen Ziel hinzugefügt.
Das Verzeichnis OUTPUT_DIR oder dessen übergeordnetes Verzeichnis muss ebenfalls zu den Include-Verzeichnissen des Ziels hinzugefügt werden.
Der folgende Ausschnitt aus der Datei „CMakeLists.txt“ zeigt, wie der Codegenerator in ein CMake-basiertes Projekt integriert wird:
find_package(Qt6 REQUIRED COMPONENTS Core OpcUa)
qt_standard_project_setup()
qt_add_executable(my_codegen
mycodegen.cpp
)
qt_opcua_generate_datatypes(
my_codegen # The target to add the generated files to
INPUT_BSD "${CMAKE_CURRENT_SOURCE_DIR}/mymodel.bsd" # Must be set at least once if INPUT_CSV_MAP is not set
INPUT_BSD "${CMAKE_CURRENT_SOURCE_DIR}/myothermodel.bsd"
DEPENDENCY_BSD "${CMAKE_CURRENT_SOURCE_DIR}/mydependency.bsd" # Optional
INPUT_CSV_MAP "MyModel:${CMAKE_CURRENT_SOURCE_DIR}/mymodel.csv" # Must be set at least once if INPUT_BSD is not set
INPUT_CSV_MAP "MyOtherModel:${CMAKE_CURRENT_SOURCE_DIR}/myothermodel.csv"
PREFIX "GeneratedOpcUa" # Mandatory
OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated" # Mandatory
)
target_include_directories(my_codegen
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(my_codegen PRIVATE Qt6::Core Qt6::OpcUa)Die generierten Dateien können dann in jeder Header- oder Quelldatei verwendet werden, indem die beiden Header der obersten Ebene für die Datentypen und die Encoder-/Decoder-Klasse eingebunden werden.
#include <generated/generatedopcuabinarydeencoder.h> // If INPUT_BSD was set
#include <generated/generatedopcuadatatypes.h> // If INPUT_BSD was set
#include <generated/generatedopcuanodeids.h> // If INPUT_CSV_MAP was set© 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.