Änderungen an Qt Quick Controls
Qt 6 sind das Ergebnis bewusster Bemühungen, das Framework effizienter und benutzerfreundlicher zu gestalten.
Wir bemühen uns, die Kompatibilität aller öffentlichen APIs in jeder Version zu gewährleisten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen.
In diesem Abschnitt fassen wir diese Änderungen unter Qt Quick Controls zusammen und geben Hinweise zu deren Umsetzung.
Migration von „ Qt Quick Controls 1“
Qt Quick Controls 1 wurde in Qt 5.11 als veraltet markiert und ist in Qt 6.0 entfernt worden. Verwenden Sie stattdessen „ Qt Quick Controls “ (früher bekannt als „ Qt Quick Controls “ 2). Weitere Informationen finden Sie im Thema „Qt 5.15: Qt Quick Controls vs. Qt Quick Controls 1“ in der Qt-5-Dokumentation.
Änderungen bei der Typregistrierung
Qt Quick Controls hat in Qt 6 einige umfangreiche, größtenteils interne Änderungen erfahren. Durch die Nutzung der in Qt 5.15 eingeführten verbesserten Typregistrierung ebnen wir den Weg für die Kompilierung der QML-Dateien des Moduls in C++ und ermöglichen eine effektivere Nutzung der Werkzeuge. Insbesondere sollte das QML-Codemodell von „ Qt Creator “ ein vollständigeres Bild der Typen liefern, wodurch die Code-Vervollständigung und Fehlerprüfung von „ Qt Quick Controls “-Code zuverlässiger wird. Auch statische Analyse-Tools wie „qmllint“ und „qmlformat“ profitieren davon, da sie nun die Typen erkennen, die zur Kompilierungszeit in C++ deklariert werden.
Infolge dieser Änderungen werden einige Dinge nun etwas anders gehandhabt.
Benutzerdefinierte Stile sind nun eigenständige QML-Module
Um die Typregistrierung zur Kompilierungszeit zu ermöglichen, ist jeder „ Qt Quick Controls “-Stil nun ein vollwertiges QML-Modul. Bisher reichte ein einzelnes „ Button.qml “ aus, um einen eigenen Stil zu erstellen. Das war zwar praktisch, erforderte jedoch eine nicht standardmäßige API, was wiederum Anpassungen in Tools wie Qt Designer erforderte.
Nun müssen alle QML-Typen, die ein Stil implementiert, in der `qmldir`-Datei dieses Stils deklariert werden:
module MyStyle
Button 1.0 Button.qmlDurch die Vereinheitlichung mit dem Rest der QML-Welt werden Stile für Entwickler vertrauter und sind hoffentlich für Anfänger leichter zu verstehen. Infolgedessen musste die folgende API entfernt werden:
- QQuickStyle::addStylePath()
- QQuickStyle::availableStyles()
- QQuickStyle::path()
- QQuickStyle::stylePathList()
- QT_QUICK_CONTROLS_STYLE_PATH
Da die Stile nun wie jedes andere QML-Modul im Importpfad der QML-Engine zu finden sein müssen, ist es nicht mehr notwendig oder möglich, diese API zu unterstützen.
Stilnamen
Zudem gibt es nun nur noch eine gültige, groß-/kleinschreibungsempfindliche Form für Stilnamen: „Material“, „MyStyle“ usw. Das heißt: Der Stilname muss exakt mit dem Namen des QML-Moduls übereinstimmen. Dies gilt auch für Dateiauswahlfelder, in denen zuvor alle Stilnamen in Kleinbuchstaben geschrieben wurden. Beispielsweise war die folgende Struktur für ein Qt-5-Projekt gültig:
MyProject
├── main.qml
├── HomePage.qml
└── +material
└───HomePage.qmlIn Qt 6 wird aus „ +material “ „ +Material “:
MyProject
├── main.qml
├── HomePage.qml
└── +Material
└───HomePage.qmlAlle bisherigen Möglichkeiten, eine Anwendung mit einem bestimmten Stil auszuführen, werden weiterhin unterstützt.
Stilauswahl zur Laufzeit und zur Kompilierungszeit
Das Importieren eines Stils hat nun aufgrund der internen Funktionsweise von Importen eine zusätzliche Bedeutung. Bisher wurden durch den Import von „ QtQuick.Controls “ die Steuerelementtypen des aktuellen Stils bei der QML-Engine registriert:
import QtQuick.ControlsWir bezeichnen dies als Stilauswahl zur Laufzeit, da der Stil zur Laufzeit ausgewählt wird.
Ein expliziter Import von „ QtQuick.Controls.Material “ würde dann lediglich alle zusätzlichen APIs verfügbar machen, die dieser Stil bereitstellt (zum Beispiel den angehängten „Material“-Typ):
import QtQuick.Controls.MaterialNun bewirkt der explizite Import eines Stils beides.
Das bedeutet im Endeffekt, dass die Steuerelementtypen (wie „Button“) aus dem zuletzt importierten Stil verwendet werden. Wir bezeichnen dies als Stilauswahl zur Kompilierungszeit.
Dies hat Auswirkungen auf bestehenden Code. Wenn Ihre Anwendung also mehr als einen Stil unterstützt, verschieben Sie diese Importe in eigene, dateiweise ausgewählte QML-Dateien.
Wenn Sie beispielsweise die folgende Datei „ main.qml “ haben:
import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Controls.Universal
ApplicationWindow {
width: 600
height: 400
visible: true
Material.theme: darkMode ? Material.Dark : Material.Light
Universal.theme: darkMode ? Universal.Dark : Universal.Light
// Child items, etc.
}Sie können den gemeinsamen Code in eine „Basis“-Komponente verschieben:
// MainWindow.qml
import QtQuick.Controls
ApplicationWindow {}Fügen Sie anschließend ein Unterverzeichnis „ +Material “ hinzu und fügen Sie darin den Material-spezifischen Code in „ MainWindow.qml “ ein:
// +Material/MainWindow.qml
import QtQuick.Controls.Material
ApplicationWindow {
Material.theme: darkMode ? Material.Dark : Material.Light
}Machen Sie dasselbe für „Universal“:
// +Universal/MainWindow.qml
import QtQuick.Controls.Universal
ApplicationWindow {
Universal.theme: darkMode ? Universal.Dark : Universal.Light
}Anschließend in „ main.qml “:
import QtQuick.Controls
MainWindow {
width: 600
height: 400
visible: true
// Child items, etc.
}Siehe auch: Verwendung von Dateiauswahlfeldern mit „ Qt Quick Controls “.
Standardstil
Der Standardstil wurde in „Basic“ umbenannt, da er nicht mehr der Standardstil ist. Stattdessen wird der Standardstil nun basierend auf der Plattform ausgewählt, für die Qt erstellt wurde:
- Android: Material-Stil
- Linux: Fusion-Stil
- macOS: macOS-Stil
- Windows: Windows-Stil
- Alle anderen Plattformen: „Basic“-Stil
Daher sollten Anwendungen, die in Qt 5 keinen Stil angegeben haben und über angepasste Steuerelemente verfügen, in Qt 6 explizit den „Basic“-Stil angeben, um sicherzustellen, dass diese Steuerelemente genauso aussehen und sich genauso verhalten wie in Qt 5.
Palette
Die Paletten-API wurde unter QQuickItem verlagert. Die verschiedenen APIs, die in Qt Quick Controls Paletten verwenden, bleiben unverändert.
Steuerelemente
Änderungen an `ApplicationWindow`
Die veralteten „overlay“-Eigenschaften und die zugehörige API wurden entfernt. Verwenden Sie stattdessen den Typ „ Overlay “.
Änderungen an der ComboBox
Die Eigenschaft „ pressed “ ist nun schreibgeschützt. Um den visuellen Druckzustand einer „ ComboBox “ zu ändern, verwenden Sie stattdessen die Eigenschaft „ down “.
Änderungen am Container
Die veraltete Funktion „ removeItem(var) “ wurde entfernt. Stattdessen können „ removeItem “ (Item) oder „ takeItem “ (int) verwendet werden.
Änderungen am Dialog
DialogDie Signale „ accepted()“ und „ rejected()“ des Dialogs werden nun vor „ closed()“ ausgelöst, wenn „ done()“, „ accept()“ und „ reject()“ aufgerufen werden.
Änderungen am Menü
Die veraltete Funktion „ removeItem(var) “ wurde entfernt. Stattdessen können „ removeItem(Item)“ oder „ takeItem(int)“ verwendet werden.
Änderungen am ToolTip
ToolTipDie Zeitüberschreitung von „ToolTip“ beginnt nun erst, nachdem „ opened()“ ausgelöst wurde. Dies führt dazu, dass Tooltips mit „Enter“-Übergängen für die gesamte Dauer der „timeout“-Eigenschaft sichtbar bleiben. Das bedeutet, dass sie etwas länger sichtbar sind als zuvor; daher kann es sinnvoll sein, die Tooltips in Ihrer Anwendung visuell zu überprüfen und die Zeitüberschreitungen gegebenenfalls anzupassen.
Änderungen an StackView
Der Enum-Wert ` StackView.Transition` wurde als veraltet markiert. Das Argument `operation` kann weggelassen werden, um für jede beliebige Operation den Standardübergang zu verwenden.
Änderungen an Tumbler
implicitWidth und „ implicitHeight “ müssen nun für die Eigenschaft „ contentItem “ von „ Tumbler “ angegeben werden, wodurch die Konsistenz mit allen anderen Steuerelementen gewährleistet wird.
© 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.