View3D QML Type
Stellt einen Ansichtsbereich bereit, in dem eine 3D-Szene gerendert werden kann. Mehr...
| Import Statement: | import QtQuick3D |
| Inherits: |
Eigenschaften
- camera : QtQuick3D::Camera
- effectiveTextureSize : size
(since 6.7) - environment : QtQuick3D::SceneEnvironment
- explicitTextureHeight : int
(since 6.7) - explicitTextureWidth : int
(since 6.7) - extensions : List<QtQuick3D::Object3D>
- importScene : QtQuick3D::Node
- renderFormat : enumeration
(since 6.4) - renderMode : enumeration
- renderOverrides : enumeration
- renderStats : QtQuick3D::RenderStats
- scene : QtQuick3D::Node
Methoden
- pickResult closestPointPick(vector3d origin, float radius, Model model)
(since 6.11) - vector3d mapFrom3DScene(vector3d scenePos)
- vector3d mapTo3DScene(vector3d viewPos)
- pickResult pick(float x, float y)
- pickResult pick(float x, float y, Model model)
(since 6.8) - List<pickResult> pickAll(float x, float y)
(since 6.2) - list<Object3D> pickInRect(point start, point end)
(since 6.11) - List<pickResult> pickSubset(float x, float y, list<Model> models)
(since 6.8) - pickResult rayPick(vector3d origin, vector3d direction)
(since 6.2) - pickResult rayPick(vector3d origin, vector3d direction, Model model)
(since 6.11) - List<pickResult> rayPickAll(vector3d origin, vector3d direction)
(since 6.2) - void setTouchpoint(Item target, point position, int pointId, bool pressed)
(since 6.8)
Ausführliche Beschreibung
View3D stellt eine 2D-Fläche bereit, auf der eine 3D-Szene gerendert werden kann. Diese Fläche ist ein „ Qt Quick “ ( Item ) und kann in einer „ Qt Quick “-Szene platziert werden.
Es gibt zwei Möglichkeiten, die 3D-Szene zu definieren, die auf dem View3D visualisiert wird: Wenn Sie eine Hierarchie von „ Node-based “-Elementen direkt als untergeordnete Elemente des View3D definieren, wird diese zur impliziten Szene des View3D.
Es ist auch möglich, auf eine vorhandene Szene zu verweisen, indem Sie die Eigenschaft „ importScene “ verwenden und sie auf den Stamm-„ Node “ der Szene setzen, die Sie visualisieren möchten. Dieser „ Node “ muss kein Vorfahr des „View3D“ sein, und Sie können mehrere „View3Ds“ haben, die dieselbe Szene importieren.
Dies wird im View3D-Beispiel veranschaulicht.
Wenn das View3D sowohl über ein untergeordnetes „ Nodes “ verfügt als auch die Eigenschaft „ importScene “ gleichzeitig festgelegt ist, werden beide Szenen so gerendert, als wären sie gleichrangige Teilbäume derselben Szene.
Um zu steuern, wie eine Szene gerendert wird, können Sie die Eigenschaft „ environment “ festlegen. Der Typ „ SceneEnvironment “ verfügt über eine Reihe von visuellen Eigenschaften, die angepasst werden können, wie z. B. Hintergrundfarbe, Tonwertzuordnung, Kantenglättung und mehr. „ ExtendedSceneEnvironment “ im Modul „ QtQuick3D.Helpers “ erweitert „ SceneEnvironment “ um noch mehr Funktionen und fügt gängige Nachbearbeitungseffekte hinzu.
Damit überhaupt etwas im View3D gerendert werden kann, benötigt die Szene außerdem eine „ Camera “. Befindet sich nur eine einzige „ Camera “ in der Szene, wird diese automatisch ausgewählt. Andernfalls kann die Eigenschaft „ camera “ verwendet werden, um die Kamera auszuwählen. Die „ Camera “ entscheidet, welche Teile der Szene sichtbar sind und wie sie auf die 2D-Fläche projiziert werden.
Standardmäßig wird die 3D-Szene zunächst in einen Offscreen-Puffer gerendert und anschließend, sobald der Vorgang abgeschlossen ist, mit dem Rest der „ Qt Quick “-Szene zusammengesetzt. Dies gewährleistet ein Höchstmaß an Kompatibilität, kann jedoch bei manchen Grafikhardwarekomponenten zu Leistungseinbußen führen. In diesem Fall kann die Eigenschaft „ renderMode “ verwendet werden, um die Art und Weise zu ändern, wie die „View3D“ im Fenster gerendert wird.
Ein View3D mit dem Standard- renderMode „Offscreen“ ist implizit ebenfalls ein „ texture provider “. Das bedeutet, dass „ ShaderEffect “ oder „ Texture.sourceItem “ direkt auf das View3D verweisen können, solange sich alle Elemente innerhalb desselben „ window “ befinden. Wie bei jedem anderen „ Item “ ist es auch möglich, das View3D oder einen seiner Vorfahren in ein texturbasiertes „ item layer “ umzuwandeln.
Siehe auch Qt Quick 3D – View3D-Beispiel.
Dokumentation der Eigenschaften
camera : QtQuick3D::Camera
Diese Eigenschaft legt fest, welche Kamera („ Camera “) zum Rendern der Szene verwendet wird. Ist diese Eigenschaft nicht festgelegt, wird die erste aktivierte Kamera in der Szene verwendet.
Hinweis: Es wird dringend empfohlen, diese Eigenschaft explizit festzulegen, anstatt sich auf die automatische Kameraauswahl zu verlassen. Wenn mehrere Kameras in der Szene vorhanden sind, kann die automatische Auswahl nicht garantieren, welche Kamera ausgewählt wird. Bei der Verwendung von „ layers “ vermeidet die explizite Angabe der Kamera zudem eine unnötige Neubewertung von Szenenknoten.
Hinweis: Enthält diese Eigenschaft eine Kamera, die nicht „ visible “ ist, werden keine weiteren Versuche unternommen, eine Kamera zu finden.
Siehe auch „ PerspectiveCamera“ , „ OrthographicCamera “, „ FrustumCamera “ und „ CustomCamera “.
effectiveTextureSize : size [since 6.7]
Diese Eigenschaft gibt die Größe der zugrunde liegenden Farb- (sowie Tiefen- und Stencil-)Puffer in Pixeln an. Sie ist für die Verwendung im GUI- (Haupt-)Thread, in QML-Bindungen oder in JavaScript vorgesehen.
Dies ist eine schreibgeschützte Eigenschaft.
Hinweis: Diese Eigenschaft ist nur relevant, wenn „ renderMode “ auf „ Offscreen “ gesetzt ist.
Diese Eigenschaft wurde in Qt 6.7 eingeführt.
Siehe auch „ explicitTextureWidth “, „ explicitTextureHeight “ und „ DebugView “.
environment : QtQuick3D::SceneEnvironment
Diese Eigenschaft legt die „ SceneEnvironment “ fest, die zum Rendern der Szene verwendet wird.
Hinweis: Wenn Sie diese Eigenschaft auf „ null “setzen , wird die „ SceneEnvironment “ auf den Standardwert zurückgesetzt.
Siehe auch „ SceneEnvironment “.
explicitTextureHeight : int [since 6.7]
Die Höhe der dem Objekt zugeordneten Textur in Pixeln. Relevant, wenn eine feste Texturgröße gewünscht wird, die nicht von der Größe des Objekts abhängt. Diese Größe hat keinen Einfluss auf die Geometrie des Objekts (seine Größe und Platzierung innerhalb der Szene), was bedeutet, dass der Inhalt der Textur auf die Fläche des Objekts vergrößert oder verkleinert (und möglicherweise gestreckt) dargestellt wird.
Standardmäßig lautet der Wert „ 0 “. Ein Wert von 0 bedeutet, dass sich die Größe der Textur an die Größe des Objekts anpasst. (texture size in pixels = item's logical size * device pixel ratio).
Hinweis: Diese Eigenschaft ist nur relevant, wenn „ renderMode “ auf „ Offscreen “ gesetzt ist. Andernfalls wird ihr Wert ignoriert.
Diese Eigenschaft wurde in Qt 6.7 eingeführt.
Siehe auch „ explicitTextureWidth “, „ effectiveTextureSize “ und „ DebugView “.
explicitTextureWidth : int [since 6.7]
Die Breite der dem Objekt zugeordneten Textur in Pixeln. Relevant, wenn eine feste Texturgröße gewünscht wird, die nicht von der Größe des Objekts abhängt. Diese Größe hat keinen Einfluss auf die Geometrie des Objekts (dessen Größe und Platzierung innerhalb der Szene), was bedeutet, dass der Inhalt der Textur auf den Bereich des Objekts vergrößert oder verkleinert (und möglicherweise gestreckt) dargestellt wird.
Standardmäßig lautet der Wert „ 0 “. Ein Wert von 0 bedeutet, dass sich die Größe der Textur an die Größe des Objekts anpasst. (texture size in pixels = item's logical size * device pixel ratio).
Hinweis: Diese Eigenschaft ist nur relevant, wenn „ renderMode “ auf „ Offscreen “ gesetzt ist. Andernfalls wird ihr Wert ignoriert.
Diese Eigenschaft wurde in Qt 6.7 eingeführt.
Siehe auch „ explicitTextureHeight “, „ effectiveTextureSize “ und „ DebugView “.
extensions : List<QtQuick3D::Object3D>
Diese Eigenschaft enthält eine Liste von Benutzererweiterungen, die mit dieser View3D verwendet werden sollten.
Siehe auch RenderExtension.
importScene : QtQuick3D::Node
Diese Eigenschaft definiert den Referenzknoten der Szene, die im Ansichtsfenster gerendert werden soll. Der Knoten muss kein untergeordneter Knoten von „ View3D “ sein. Dieser referenzierte Knoten wird zu einem gleichrangigen Knoten neben den untergeordneten Knoten von „ View3D “, sofern solche vorhanden sind.
Hinweis: Szenen können nur zwischen „ View3D “-Elementen gemeinsam genutzt werden, die sich im selben „ window “ befinden.
Hinweis: Beim Teilen von Szenen zwischen mehreren „ View3D “-Elementen sollte die importierte Szene vollständig importiert werden, d. h., das Importieren eines Teilbaums einer Szene wird nicht unterstützt. Wenn mehrere „View3Ds“ verschiedene Teile derselben geteilten Szene anzeigen sollen, sollten Sie stattdessen die Verwendung von „ layers “ in Betracht ziehen.
Hinweis: Diese Eigenschaft kann nur einmal festgelegt werden; nachfolgende Änderungen haben keine Auswirkung.
Sie können auch eine Hierarchie von „ Node-based “-Elementen direkt als untergeordnete Elemente des „ View3D “ definieren; dies wird dann zur impliziten Szene des „ View3D “.
Um die aktuelle Szene des „ View3D “ abzurufen, verwenden Sie die Eigenschaft „ scene “.
Siehe auch „ Node “.
renderFormat : enumeration [since 6.4]
Diese Eigenschaft legt das Format der Hintergrundtextur fest. Sie ist nur dann von Bedeutung, wenn der „ View3D “ in eine Textur rendert, beispielsweise weil der „ renderMode “ auf „ View3D.Offscreen “ gesetzt ist.
Der Standardwert ist „ ShaderEffectSource.RGBA8 “.
Wenn das Format vom zugrunde liegenden Grafiktreiber zur Laufzeit nicht unterstützt wird, wird „RGBA8“ verwendet.
- ShaderEffectSource.RGBA8
- ShaderEffectSource.RGBA16F
- ShaderEffectSource.RGBA32F
Diese Eigenschaft wurde in Qt 6.4 eingeführt.
Siehe auch QtQuick::ShaderEffectSource::format und QtQuick::Item::layer.format.
renderMode : enumeration
Diese Eigenschaft legt fest, wie das „ View3D “ mit den anderen Teilen der „ Qt Quick “-Szene kombiniert wird.
Standardmäßig wird die Szene als Zwischenschritt in einen Off-Screen-Puffer gerendert. Dieser Off-Screen-Puffer wird dann wie jedes andere „ Qt Quick “ in das Fenster (oder das Renderziel) gerendert Item.
Für die meisten Benutzer besteht keine Notwendigkeit, den Rendermodus zu ändern, und diese Eigenschaft kann getrost ignoriert werden. Auf manchen Grafikhardwarekomponenten kann die Verwendung eines Off-Screen-Puffers jedoch zu einem Leistungsengpass führen. In diesem Fall lohnt es sich möglicherweise, mit anderen Modi zu experimentieren.
| Konstante | Beschreibung |
|---|---|
View3D.Offscreen | Die Szene wird als Zwischenschritt in einen Off-Screen-Puffer gerendert. Dieser Off-Screen-Puffer wird anschließend mit dem Rest der „ Qt Quick “-Szene zusammengesetzt. |
View3D.Underlay | Die Szene wird direkt in das Fenster gerendert, bevor der Rest der „ Qt Quick “-Szene gerendert wird. In diesem Modus kann das „ View3D “ nicht über andere „ Qt Quick “-Elemente gelegt werden. |
View3D.Overlay | Die Szene wird direkt im Fenster gerendert, nachdem „ Qt Quick “ gerendert wurde. In diesem Modus befindet sich „ View3D “ immer über anderen „ Qt Quick “-Elementen. |
View3D.Inline | Der Szenengraph von „ View3D “ ist in den Hauptszenengraphen eingebettet, und es gelten dieselben Reihenfolgevorgaben wie für jedes andere „ Qt Quick “- Item. Da dieser Modus je nach Inhalt der Szene zu subtilen Problemen führen kann, weil tiefenbasierte 3D-Inhalte in einen 2D-Szenenbaum eingefügt werden, wird von seiner Verwendung abgeraten, sofern kein spezifischer Bedarf besteht. |
Die Standardeinstellung ist „ View3D.Offscreen “.
Hinweis: Beim Ändern des Rendermodus ist zu beachten, dass „ View3D.Offscreen “ (die Standardeinstellung) der einzige Modus ist, der eine perfekte Grafikwiedergabe garantiert. Die anderen Modi weisen alle Einschränkungen auf, die zu visuellen Störungen führen können. Daher ist es wichtig, zu überprüfen, ob die visuelle Darstellung nach dem Ändern dieser Eigenschaft weiterhin korrekt ist.
Hinweis: Bei Verwendung der Modi „Underlay“, „Overlay“ oder „Inline“ kann es sinnvoll und in manchen Fällen sogar erforderlich sein, die Schreibvorgänge in den Tiefenpuffer des „ Qt Quick “-Szenengraphen über ` QQuickGraphicsConfiguration::setDepthBufferFor2D()` zu deaktivieren, bevor die „ QQuickWindow “ oder „ QQuickView “ angezeigt werden, die das „ View3D “-Element enthalten.
renderOverrides : enumeration
Legt fest, wie „ Qt Quick 3D “ das Rendering durchführt.
| Konstante | Beschreibung |
|---|---|
View3D.None | Das Rendering verläuft normal. Interne Durchläufe werden entsprechend den in der Anwendung verwendeten Funktionen geplant. |
View3D.DisableInternalPasses | Deaktiviert die internen Rendering-Durchläufe von „ Qt Quick 3D “. Wenn dieser Modus aktiviert ist, ist die Anwendung für die Erstellung und Darstellung des endgültigen Frames verantwortlich. In der Regel umfasst dies die Implementierung benutzerdefinierter Durchläufe und die Darstellung des Ergebnisses im Ansichtsfenster mithilfe von „ SimpleQuadRenderer “ oder einer benutzerdefinierten „ render extension “. |
renderStats : QtQuick3D::RenderStats [read-only]
Diese Eigenschaft liefert Statistiken zur Darstellung eines Frames, wie beispielsweise „ fps “, „ frameTime “, „ renderTime “, „ syncTime “ und „ maxFrameTime “.
scene : QtQuick3D::Node [read-only]
Gibt den Stamm- Node der Szene von „ View3D “ zurück.
So definieren Sie die 3D-Szene, die im „ View3D “ visualisiert wird:
- Definieren Sie eine Hierarchie von „ Node-based “-Elementen direkt als untergeordnete Elemente des „ View3D “; diese wird dann zur impliziten Szene des „ View3D “.
- Verweisen Sie mithilfe der Eigenschaft „ importScene “ auf eine vorhandene Szene und setzen Sie diese auf den Stamm- Node der Szene, die Sie visualisieren möchten. Dieser „ Node “ muss kein Vorfahr des „ View3D “ sein, und Sie können mehrere „View3Ds“ haben, die dieselbe Szene importieren.
Siehe auch importScene.
Methodendokumentation
[since 6.11] pickResult closestPointPick(vector3d origin, float radius, Model model)
Diese Methode ermittelt den Punkt auf der Oberfläche von model, der origin am nächsten liegt, und zwar innerhalb einer Entfernung von radius. Wenn model gleich null ist, wird das nächstgelegene Objekt innerhalb von radius ermittelt.
Existiert kein solches Objekt, wird „ null “ zurückgegeben.
Diese Methode wurde in Qt 6.11 eingeführt.
vector3d mapFrom3DScene(vector3d scenePos)
Wandelt „ scenePos “ vom Szenenraum (3D) in den Ansichtsraum (2D) um.
Die zurückgegebenen x- und y-Werte liegen im Ansichtsraum, wobei die linke obere Ecke bei [0, 0] und die rechte untere Ecke bei [Breite, Höhe] liegt. Der zurückgegebene z-Wert enthält den Abstand von der nahen Clip-Ebene des Frustums (clipNear) zu „ scenePos “ in Szenenkoordinaten. Ist der Abstand negativ, bedeutet dies, dass sich „ scenePos “ hinter der aktiven Kamera befindet. Kann „ scenePos “ keiner Position in der Szene zugeordnet werden, wird die Position [0, 0, 0] zurückgegeben.
Diese Funktion setzt voraus, dass „ camera “ der Ansicht zugewiesen ist.
Siehe auch mapTo3DScene() und Camera.mapToViewport().
vector3d mapTo3DScene(vector3d viewPos)
Wandelt „ viewPos “ vom Ansichtsraum (2D) in den Szenenraum (3D) um.
Die x- und y-Werte von ` viewPos ` sollten in Ansichts-Koordinaten angegeben werden, wobei die linke obere Ecke bei [0, 0] und die rechte untere Ecke bei [Breite, Höhe] liegt. Der z-Wert wird als Abstand zur nahen Clip-Ebene des Frustums (clipNear) in Szenenkoordinaten interpretiert.
Wenn „ viewPos “ nicht erfolgreich auf eine Position in der Szene abgebildet werden kann, wird die Position [0, 0, 0] zurückgegeben.
Diese Funktion setzt voraus, dass der Ansicht ein ` camera ` zugewiesen ist.
Siehe auch „ mapFrom3DScene()“ und „ Camera.mapFromViewport()“.
pickResult pick(float x, float y)
Diese Methode „schießt“ einen Strahl von den Ansichtskoordinaten x und y in die Szene und gibt Informationen über den nächstgelegenen Schnittpunkt mit einem Objekt in der Szene zurück.
Dies kann beispielsweise mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.
Dreiecke, die vom Material „ cull mode “ beim Rendern verworfen werden, werden ebenfalls nicht berücksichtigt, sodass nur Geometrie gemeldet wird, die entlang des Strahls tatsächlich sichtbar ist.
Siehe auch pickAll(), pickSubset() und pickInRect().
[since 6.8] pickResult pick(float x, float y, Model model)
Diese Methode „schießt“ einen Strahl von den Ansichtskoordinaten x und y in die Szene und gibt Informationen über den Schnittpunkt zwischen dem Strahl und dem angegebenen model zurück.
Dies kann beispielsweise mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.
Diese Methode wurde in Qt 6.8 eingeführt.
Siehe auch pickAll(), pickSubset() und pickInRect().
[since 6.2] List<pickResult> pickAll(float x, float y)
Diese Methode „schießt“ einen Strahl von den Ansichts-Koordinaten x und y in die Szene und gibt eine Liste mit Informationen zu Schnittpunkten mit Objekten in der Szene zurück. Die zurückgegebene Liste ist nach der Entfernung zur Kamera sortiert, wobei die nächstgelegenen Schnittpunkte zuerst und die am weitesten entfernten zuletzt erscheinen.
Dies kann beispielsweise mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.
Diese Methode wurde in Qt 6.2 eingeführt.
Siehe auch pick(), pickSubset() und pickInRect().
[since 6.11] list<Object3D> pickInRect(point start, point end)
Diese Methode wählt alle Objekte innerhalb eines rechteckigen Bereichs aus, der durch die Punkte start und end in Ansichtskoordinaten definiert ist.
Gibt eine Liste der Objekte zurück, die sich innerhalb des angegebenen Rechtecks befinden. Dies kann für die Auswahl per Markierung verwendet werden, bei der der Benutzer ein Rechteck zieht, um mehrere Objekte auszuwählen.
Diese Methode wurde in Qt 6.11 eingeführt.
Siehe auch pick(), pickAll() und pickSubset().
[since 6.8] List<pickResult> pickSubset(float x, float y, list<Model> models)
Diese Methode „schießt“ einen Strahl von den Ansichtskoordinaten x und y in die Szene und gibt Informationen über die Schnittpunkte mit der übergebenen Liste models zurück. Dabei wird ausschließlich die übergebene Modellliste abgeglichen. Die zurückgegebene Liste ist nach der Entfernung zur Kamera sortiert, wobei die nächstgelegenen Schnittpunkte an erster Stelle und die am weitesten entfernten an letzter Stelle stehen.
Diese Funktion kann beispielsweise mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.
Funktioniert sowohl mit einer `List<Model>` als auch mit dynamischen JavaScript-Arrays von Modellen.
Diese Methode wurde in Qt 6.8 eingeführt.
Siehe auch pick(), pickAll() und pickInRect().
[since 6.2] pickResult rayPick(vector3d origin, vector3d direction)
Diese Methode „schießt“ einen Strahl in die Szene, der bei der Position „ origin “ und in der Richtung „ direction “ beginnt, und gibt Informationen über den nächstgelegenen Schnittpunkt mit einem Objekt in der Szene zurück.
Dies kann beispielsweise mit der Position und dem Vorwärtsvektor eines beliebigen Objekts in einer Szene aufgerufen werden, um zu ermitteln, welches Objekt sich vor einem bestimmten Element befindet. Dadurch ist es möglich, von jedem Punkt in der Szene aus eine Auswahl vorzunehmen.
Dreiecke, die vom Material „ cull mode “ beim Rendern verworfen werden, werden ebenfalls nicht ausgewählt, sodass nur Geometrie gemeldet wird, die entlang des Strahls tatsächlich sichtbar ist.
Diese Methode wurde in Qt 6.2 eingeführt.
[since 6.11] pickResult rayPick(vector3d origin, vector3d direction, Model model)
Diese Methode „schießt“ einen Strahl in die Szene, der bei origin und in direction beginnt, und gibt Informationen über den Schnittpunkt zwischen dem Strahl und dem angegebenen model zurück.
Diese Methode wurde in Qt 6.11 eingeführt.
[since 6.2] List<pickResult> rayPickAll(vector3d origin, vector3d direction)
Diese Methode „schießt“ einen Strahl in die Szene, der bei origin beginnt und in direction endet, und gibt eine Liste mit Informationen zu den nächstgelegenen Schnittpunkten mit Objekten in der Szene zurück. Die Liste ist nach der Entfernung vom Ursprung entlang des Richtungsvektors vorsortiert, wobei die nächstgelegenen Schnittpunkte an erster Stelle und die am weitesten entfernten an letzter Stelle stehen.
Diese Methode kann beispielsweise mit der Position und dem Vorwärtsvektor eines beliebigen Objekts in einer Szene aufgerufen werden, um zu ermitteln, welche Objekte sich vor einem bestimmten Objekt befinden. Dadurch wird es möglich, von jedem Punkt in der Szene aus eine Auswahl vorzunehmen.
Diese Methode wurde in Qt 6.2 eingeführt.
[since 6.8] void setTouchpoint(Item target, point position, int pointId, bool pressed)
Sendet ein synthetisches Touch-Ereignis an target und verschiebt dabei den Touch-Punkt mit der ID pointId zu position, wobei pressed bestimmt, ob der Punkt gedrückt ist. Sendet außerdem das entsprechende Touch-Release-Ereignis, falls pointId zuvor auf einem anderen Element aktiv war.
Diese Methode wurde in Qt 6.8 eingeführt.
© 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.