Auf dieser Seite

Ä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.qml

Durch 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.qml

In Qt 6 wird aus „ +material “ „ +Material “:

MyProject
├── main.qml
├── HomePage.qml
└── +Material
    └───HomePage.qml

Alle 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.Controls

Wir 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.Material

Nun 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:

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.