Изменения в 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 Print Support для получения информации о 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.0/gui-changes-qt6.html