Die Änderungen an Qt GUI

Qt 6 sind das Ergebnis des bewussten Bemühens, das Framework effizienter und benutzerfreundlicher zu gestalten.

Wir versuchen, die Binär- und Quellcodekompatibilität für alle öffentlichen APIs in jeder Version zu erhalten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen.

In diesem Thema fassen wir diese Änderungen unter Qt GUI zusammen und geben Hinweise zu ihrer Handhabung.

Kernel-Klassen

Die QBitmap-Klasse

Die implizite Konstruktion einer QBitmap aus einer QPixmap wird nicht mehr unterstützt. Der Konstruktor und der Zuweisungsoperator wurden explizit gemacht und als veraltet gekennzeichnet. Verwenden Sie stattdessen die neue statische Fabrikfunktion fromPixmap.

Die Klasse QCursor

Die implizite Konstruktion eines QCursor aus einem QPixmap wird nicht mehr unterstützt, der Konstruktor wurde explizit gemacht.

Die Klasse QKeyCombination

QKeyCombination ist eine neue Klasse zum Speichern einer Kombination aus einer Taste und einem optionalen Modifikator. Sie sollte als Ersatz für die Kombination von Werten aus dem Qt::Key enum mit einem Modifikator auf eine typsichere Weise verwendet werden.

Wir empfehlen, Code zu migrieren, der derzeit operator+() verwendet, um einen Schlüssel und Modifikatoren zu kombinieren, da künftige C++-Standards arithmetische Operationen zwischen nicht verwandten Aufzählungstypen wahrscheinlich als illegal deklarieren werden. Verwenden Sie operator|(), und ändern Sie APIs, die ein int erwarten, um stattdessen ein QKeyCombination zu erwarten.

Bestehende APIs, die eine int für eine Tastenkombination erwarten, können mit QKeyCombination::toCombined() aufgerufen werden.

Text-Klassen

Die QFontDatabase-Klasse

Die Klasse QFontDatabase hat jetzt nur noch statische Mitgliedsfunktionen. Der Konstruktor wurde veraltet. Anstelle von z.B.

const QStringList fontFamilies = QFontDatabase().families();

verwenden

const QStringList fontFamilies = QFontDatabase::families();

Die QFont Klasse

Die numerischen Werte des QFont::Weight Enumers wurden geändert, um mit den OpenType Gewichtswerten übereinzustimmen. QFont::setWeight() erwartet einen Enum-Wert anstelle eines int, und Code, der den Setter mit einer Ganzzahl aufruft, wird nicht kompiliert. Um weiterhin die alten Integer-Werte zu verwenden, benutzen Sie QFont::setLegacyWeight().

Zeichnen von Klassen

Siehe die Portierungsanleitung für Qt Print Support für Informationen über QPagedPaintDevice und andere druckbezogene Klassen.

Utility-Klassen

QIntValidator und QDoubleValidator

Die Methode setRange() ist nicht mehr als virtuell gekennzeichnet.

OpenGL-Klassen

Mit der Einführung von Qt RHI als Rendering-Grundlage in Qt wurden die meisten Klassen mit dem Präfix QOpenGL in das Qt OpenGL Modul verschoben.

Weitere Details sind in der Qt OpenGL porting guide zu finden.

Eine bemerkenswerte Ausnahme ist die Klasse QOpenGLContext, die sich immer noch in Qt GUI befindet.

Darüber hinaus wurde die Klasse QOpenGLWidget in ein neues Modul mit dem Namen Qt OpenGL Widgets verschoben.

Die Klasse QOpenGLContext

Die Funktion QOpenGLContext::versionFunctions() wurde durch QOpenGLVersionFunctionsFactory::get() ersetzt. QOpenGLVersionFunctionsFactory ist jetzt eine öffentliche Klasse, die Teil des Qt OpenGL Moduls.

ANGLE

Unter Windows ist ANGLE, ein OpenGL ES zu Direct 3D Übersetzer eines Drittanbieters, nicht mehr in Qt enthalten. Das bedeutet, dass Qt::AA_UseOpenGLES und die Umgebungsvariable QT_OPENGL=angle keine Wirkung mehr haben. In dynamischen OpenGL-Builds gibt es keinen automatischen Fallback zu ANGLE, falls OpenGL selbst nicht initialisiert werden kann. Für QWindow oder QWidget basierte Anwendungen, die OpenGL direkt verwenden, zum Beispiel über QOpenGLWidget, bedeutet dies, dass OpenGL proper die einzige Option zur Laufzeit ist. Die Alternative der Verwendung einer reinen Software-OpenGL-Implementierung, wie z.B. Mesa llvmpipe, die mit den vorgefertigten Qt-Paketen ausgeliefert wird, ist jedoch weiterhin verfügbar. Für die Anwendungen Qt Quick und Qt Quick 3D bietet Qt 6 zusätzlich zu OpenGL auch Unterstützung für Direct 3D 11, Vulkan und Metal. Unter Windows ist die Standardauswahl Direct 3D, daher wird die Entfernung von ANGLE dadurch gemildert, dass auch andere Grafik-APIs als OpenGL unterstützt werden.

Native Integration der Zwischenablage

Qt 5 bot Schnittstellen für die Integration von plattformspezifischen oder benutzerdefinierten Zwischenablageformaten in Qt über QMacPasteboardMime in QtMacExtras und QWindowsMime von der Windows QPA API. Seit Qt 6.6 wird die entsprechende Funktionalität von den Klassen QUtiMimeConverter für macOS und QWindowsMimeConverter für Windows bereitgestellt.

Die Portierung von QWindowsMime auf QWindowsMimeConverter erfordert praktisch keine Änderungen, da die virtuelle Schnittstelle identisch ist. In Qt 6 ist es jedoch nicht mehr erforderlich, eine QWindowsMimeConverter -Implementierung zu registrieren; durch die Instanziierung des Typs wird der Konverter implizit registriert.

Die Portierung eines QMacPasteboardMime auf QUtiMimeConverter erfordert die Umbenennung einiger virtueller Funktionen. Beachten Sie, dass die QMacPasteboardMime API den veralteten Begriff flavor für das native Zwischenablageformat unter macOS verwendet, während die Plattform jetzt Uniform Type Identifiers, d.h. UTIs verwendet, was Qt für Funktions- und Parameternamen angepasst hat.

Die Funktionen mimeFor und flavorFor werden durch die Implementierungen mimeForUti bzw. utiForMime ersetzt. Diese sollten den Namen des Mime-Typs oder UTI zurückgeben, in den der Konverter das Eingabeformat konvertieren kann, so dass ein Port normalerweise nur die Umbenennung bestehender Überschreibungen beinhaltet. Die Funktionen convertToMime, convertFromMime und count in QUtiMimeConverter sind identisch mit ihren QMacPasteboardMime-Versionen.

Die Funktionen canConvert, converterName werden nicht mehr benötigt, sie werden durch die Implementierung der obigen Funktionen impliziert, so dass Überschreibungen dieser Funktionen entfernt werden können.

Wie bei QWindowsMimeConverter erfolgt die Registrierung durch Instanziierung des Typs.

© 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.