Изменения в Qt GUI
Qt 6 — результат осознанных усилий по повышению эффективности и удобства использования фреймворка.
Мы стремимся поддерживать двоичную и исходную совместимость для всех публичных API в каждом релизе. Но некоторые изменения были неизбежны, чтобы сделать Qt лучшим фреймворком.
В этом разделе мы подводим итоги этих изменений в Qt GUI и предоставляем рекомендации по работе с ними.
Ядерные классы
Класс QBitmap
Неявное создание объекта QBitmap из QPixmap больше не поддерживается. Конструктор и оператор присваивания стали явными и помечены как устаревшие. Используйте новую статическую функцию-фабрику fromPixmap вместо этого.
Класс QCursor
Неявное создание объекта QCursor из QPixmap больше не поддерживается, конструктор стал явным.
Класс QKeyCombination
QKeyCombination — новый класс для хранения комбинации клавиши с необязательной модификацией. Он должен использоваться в качестве замены для комбинирования значений из перечисления Qt::Key с модификатором безопасным для типов способом.
Мы рекомендуем мигрировать код, который в настоящее время использует оператор+() для объединения клавиши и модификаторов, так как будущие стандарты C++, вероятно, объявят арифметические операции между несвязанными типами перечислений незаконными. Используйте оператор|(), и измените API, ожидающие int, на ожидание QKeyCombination вместо этого.
Существующие API, ожидающие int для комбинации клавиш, могут быть вызваны с помощью QKeyCombination::toCombined().
Текстовые классы
Класс QFontDatabase
Класс QFontDatabase теперь содержит только статические члены-функции. Конструктор устарел. Вместо, например,
const QStringList fontFamilies = QFontDatabase().families();
используйте
const QStringList fontFamilies = QFontDatabase::families();
Класс QFont
Числовые значения перечисления QFont::Weight были изменены в соответствии со значениями веса OpenType. QFont::setWeight() ожидает значение перечисления вместо int, и код, вызывающий установщик с целым числом, не будет компилироваться. Чтобы продолжить использование старых целых значений, используйте QFont::setLegacyWeight().
Классы рисования
См. руководство по переносу для Поддержки печати Qt для информации о QPagedPaintDevice и других классах, связанных с печатью.
Классы утилит
QIntValidator и QDoubleValidator
Метод setRange() больше не помечен как виртуальный.
Классы OpenGL
В связи с введением Qt RHI в качестве основы для рендеринга в Qt, большинство классов, начинающихся с QOpenGL, были перемещены в модуль Qt OpenGL.
Дополнительные сведения можно найти в руководстве по переносу Qt OpenGL.
Заметным исключением является класс QOpenGLContext, который по-прежнему находится в Qt GUI.
Кроме того, класс QOpenGLWidget был перемещен в новый модуль под названием Qt OpenGL Widgets.
Класс QOpenGLContext
Функция QOpenGLContext::versionFunctions() заменена на QOpenGLVersionFunctionsFactory::get(). QOpenGLVersionFunctionsFactory теперь является публичным классом, частью модуля Qt OpenGL.
ANGLE
В Windows ANGLE, сторонний переводчик OpenGL ES в Direct 3D, больше не включен в Qt. Это означает, что Qt::AA_UseOpenGLES и переменная среды QT_OPENGL=angle больше не имеют никакого эффекта. В динамических сборках OpenGL нет автоматического перехода к ANGLE в случае, если OpenGL не может быть инициализирован. Для приложений, основанных на QWindow или QWidget и использующих OpenGL напрямую, например, через QOpenGLWidget, это означает, что OpenGL — единственный вариант во время выполнения. Тем не менее, альтернатива — использование чисто программной реализации OpenGL, такой как Mesa llvmpipe, поставляемой с предустановленными пакетами Qt, по-прежнему доступна. Для приложений Qt Quick и Qt Quick 3D Qt 6 добавляет поддержку Direct 3D 11, Vulkan и Metal в дополнение к OpenGL. В Windows по умолчанию используется Direct 3D, поэтому удаление ANGLE смягчается поддержкой графических API, отличных от OpenGL.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/gui-changes-qt6.html