Spec-Zone.ru › Qt 5.15

Отличия от Qt Quick Controls 1

Qt Quick Controls 1 изначально разрабатывался для поддержки настольных платформ, а мобильная и встроенная поддержка появилась чуть позже. Они обладают очень широким охватом, так как предоставляют систему стилей, достаточно гибкую для разработки приложений с зависимым или независимым от платформы стилем.

На встроенных системах, где аппаратные ресурсы ограничены, этот подход может быть неэффективным. Qt Quick Controls был разработан для решения этой проблемы, используя бенчмарки для руководства разработкой.

C++ и QML

Во многих случаях внутреннее состояние элемента управления может быть более эффективно обработано в C++. Например, обработка событий ввода в C++ влияет на элементы управления, которые в противном случае должны создавать внутренние объекты MouseAreas и Keys.

Стили

Обработка событий и логики в C++ не только повышает производительность, но и позволяет визуальному слою QML быть простым декларативным слоем сверху. Это отражается в структуре проекта элементов управления: все визуальные реализации находятся в папке imports, поэтому пользователи, которые хотят создать свой собственный полный стиль, могут скопировать папку и начать его настройку. Подробнее о реализации плагина стиля читайте здесь.

В Qt Quick Controls стили больше не предоставляют компоненты, которые динамически создаются элементами управления, но сами элементы управления состоят из делегатов элементов, которые могут быть заменены. По сути, это означает, что делегаты являются элементами Qt Quick, которые создаются на месте, как свойства элемента управления, и просто добавляются в качестве дочернего элемента к элементу управления.

Модульность и Простота

В случае более сложных элементов управления иногда лучше разделить их на отдельные строительные блоки. Например, сложный элемент ScrollView:

ScrollView {
    horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
    Flickable {
        // ...
    }
}

Заменяется простыми элементами ScrollBar/ScrollIndicator, которые можно прикрепить к любому Flickable:

Flickable {
    // ...
    ScrollBar.vertical: ScrollBar { }
}

API Qt Quick Controls призван быть чистым и простым. Общие операции просты, а более сложные подробно документированы с фрагментами кода, которые можно скопировать в свой код.

Таблица сравнения функций

Qt Quick Controls 1 Qt Quick Controls
Стилизуемые делегаты Да Да
Предварительно созданные нативные стили Да Нет
Изменение стилей/тем в процессе работы Да 1 Да 2
Можно использовать на настольных системах Да Да
Можно использовать на мобильных системах Да 3 Да
Можно использовать на встроенных системах Да 3 Да
Внутренняя обработка событий QML C++
  1. Не поддерживается официально, но технически возможно через закрытые API
  2. Только темы для определённых стилей могут быть изменены во время выполнения, стили фиксированы
  3. Производительность может быть не оптимальной

Перенос кода Qt Quick Controls 1

API Qt Quick Controls очень похож на API Qt Quick Controls 1, но в нём есть некоторые изменения, необходимые для улучшений. Большинство изменений касаются стилей; все делегаты элемента управления теперь доступны в самом элементе управления, а не в отдельном объекте стиля.

Например, для стилизации кнопки в Qt Quick Controls 1:

Button {
    style: ButtonStyle {
        label: Label {
            // ...
        }
    }
}

Для стилизации кнопки в Qt Quick Controls:

Button {
    contentItem: Label {
        // ...
    }
}

Подготовка к миграции

С учётом этого, хорошим способом подготовки к миграции на Qt Quick Controls 2 является размещение каждого элемента управления, для которого у вас есть пользовательский стиль, в отдельном файле QML. Например, кнопку Qt Quick Controls 1 выше можно перенести в файл под названием Button.qml в каталоге controls, и использовать её следующим образом:

import "controls" as Controls

Controls.Button {
    // ...
}

Это работает с обеими модулями и сократит объём работы при начале миграции.

Таблица сравнения типов

В первой колонке перечислены все типы, доступные в Qt Quick Controls 1, Qt Quick Dialogs и Qt Quick Extras. Во второй колонке описан соответствующий тип в Qt Quick Controls. Если прямой аналог отсутствует, в третьей колонке указана альтернатива, обеспечивающая аналогичную функциональность. В последней колонке приведены некоторые замечания об отличиях типов в разных модулях.

Qt Quick Controls 1 Qt Quick Controls Альтернативы Замечания
Действие Действие Сочетание клавиш (Qt Quick)
Окно приложения Окно приложения
Индикатор ожидания Индикатор ожидания
Кнопка Кнопка
Календарь — Список месяцев, Строка дней недели, Столбец номеров недель (Qt Labs Calendar)
  • Qt Labs Calendar: MonthGrid, DayOfWeek, и WeekNumberColumn являются экспериментальными нестилизованными строительными блоками для календарных представлений.
Флажок Флажок
Комбобокс Комбобокс
Группа исключений — Группа действий, Группа кнопок (Qt Quick Controls)
  • Qt Quick Controls: ActionGroup и ButtonGroup предлагают аналогичную функциональность.
Группа Группа
Метка Метка
Меню Меню Меню (Qt Labs Platform)
  • Qt Quick Controls 1: Menu является нативным на платформах, где реализация доступна в Qt Platform Abstraction Layer. На других платформах используется всплывающее окно меню на основе QML. Menu поддерживает традиционные каскадные подменю, но не работает в Embedded Linux, потому что EGLFS не поддерживает несколько окон верхнего уровня.
  • Qt Quick Controls: Menu является неродным Item-based всплывающим окном, которое расположено поверх содержимого приложения. Из-за этого всплывающие меню ограничены границами окна. Menu полностью настраивается с помощью QML и Qt Quick и позволяет добавлять любые Items. Отсутствуют традиционные для настольных ПК функции, такие как каскадные подменю и отображение сочетаний клавиш.
  • Qt Labs Platform: Menu — экспериментальное нативное меню, которое использует Qt Widgets в качестве резервного варианта на платформах, где нативная реализация недоступна в Qt Platform Abstraction Layer.
Панель меню Панель меню Панель меню (Qt Labs Platform)
  • Qt Quick Controls 1: MenuBar является нативным на платформах, где реализация доступна в Qt Platform Abstraction Layer. На других платформах используется элемент панели меню на основе QML, расположенный в верхней части окна.
  • Qt Quick Controls: MenuBar — неродная панель меню на основе QML, которую можно полностью настроить с помощью QML и Qt Quick.
  • Qt Labs Platform: MenuBar — экспериментальная нативная панель меню. Она доступна только на платформах, где нативная реализация доступна в Qt Platform Abstraction Layer.
Элемент меню, Разделитель меню Элемент меню, Разделитель меню Элемент меню, Разделитель меню (Qt Labs Platform)
  • Qt Quick Controls 1: MenuItem и MenuSeparator являются нативными на платформах, где реализация доступна в Qt Platform Abstraction Layer. На других платформах используются элементы меню и разделители на основе QML.
  • Qt Quick Controls: MenuItem и MenuSeparator — неродные элементы меню и разделители на основе QML, которые можно полностью настроить с помощью QML и Qt Quick.
  • Qt Labs Platform: MenuItem и MenuSeparator — экспериментальные нативные элементы меню и разделители.
Полоса прогресса Полоса прогресса
Радиокнопка Радиокнопка
Прокручиваемое поле Прокручиваемое поле
Ползунок Ползунок
Поле ввода Поле ввода
Разделительная область Разделительная область
  • Qt Quick Controls 1: Использует присоединенные свойства макета для указания размеров.
  • Qt Quick Controls: Использует отдельные присоединенные свойства Разделительной области для указания размеров. Позволяет сохранять и восстанавливать состояние. Отдельный API присоединенных свойств ручки разделителя для управления ручками разделителя.
Просмотр стека, Делегат просмотра стека, Стек Просмотр стека
  • Qt Quick Controls: StackView предоставляет настраиваемые переходы и присоединенные свойства через единственный тип StackView.
Строка состояния — Панель инструментов (Qt Quick Controls)
  • Qt Quick Controls: ApplicationWindow позволяет назначать любой элемент или компонент, например, ToolBar, в качестве заголовка или подвала.
Переключатель Переключатель
Просмотр вкладок, Вкладка — Панель вкладок, Кнопка вкладки (Qt Quick Controls)
  • Qt Quick Controls: TabBar и TabButton предлагают аналогичную функциональность и могут использоваться для построения просмотров вкладок.
Таблица — Новый Просмотр таблицы можно найти в модуле Qt Quick.
Область многострочного текста Область многострочного текста
  • Qt Quick Controls 1: TextArea наследует ScrollView и поэтому всегда является прокручиваемым редактором.
  • Qt Quick Controls: TextArea — более простой многострочный редактор, который может быть присоединен к Flickable для обеспечения прокрутки. Это позволяет использовать TextArea в прокручиваемой странице без вложенных прокручиваемых областей, что может быть проблематично и вызывать проблемы с удобством использования.
Поле ввода текста Поле ввода текста
Панель инструментов Панель инструментов
Кнопка инструмента Кнопка инструмента
Дерево —
Qt Quick Dialogs Qt Quick Controls Альтернативы Замечания
Диалог — Диалог
  • Qt Quick Dialogs: Dialog является либо окном верхнего уровня, либо Item-based всплывающим окном в зависимости от того, поддерживает ли базовая платформа несколько окон верхнего уровня.
  • Qt Quick Controls: Dialog не является окном верхнего уровня, а Item-based всплывающим окном, которое расположено поверх содержимого приложения. Из-за этого диалоги ограничены границами окна.
Диалоговое окно выбора цвета, Диалоговое окно выбора файла, Диалоговое окно выбора шрифта, Диалоговое окно сообщений — Диалоговое окно выбора цвета, Диалоговое окно выбора файла, Диалоговое окно выбора папки, Диалоговое окно выбора шрифта, Диалоговое окно сообщений (Платформа Qt Labs)
  • Диалоги Qt Quick: Диалоги являются родными на платформах, где реализация доступна в слое абстракции платформы Qt. На других платформах используются либо Qt Widgets, либо диалоги на основе QML, в зависимости от того, поддерживает ли основная платформа несколько окон верхнего уровня.
  • Платформа Qt Labs: Экспериментальные родные диалоги, которые используют Qt Widgets в качестве резервного варианта на платформах, где родная реализация недоступна в слое абстракции платформы Qt.
Qt Quick Extras Qt Quick Controls Альтернативы Замечания
Цифровая шкала —
Кнопка с задержкой Кнопка с задержкой
Цифровая шкала Цифровая шкала
Индикатор —
Изображение —
Круговой список —
Индикатор статуса —
Переключатель —
Переключатель, Столбец переключателя Переключатель
  • Qt Quick Extras: Tumbler может состоять из нескольких столбцов.
  • Qt Quick Controls: Tumbler представляет собой одно вращающееся колесо. Несколько столбцов могут быть созданы, разместив несколько Tumblers рядом друг с другом.
Без предшественника Qt Quick Controls Альтернативы Замечания
— Абстрактная кнопка
— Группа действий Группа взаимоисключающих элементов (Qt Quick Controls 1)
  • Qt Quick Controls 1: ExclusiveGroup предлагает аналогичную функциональность.
— Группа кнопок Группа взаимоисключающих элементов (Qt Quick Controls 1)
  • Qt Quick Controls 1: ExclusiveGroup предлагает аналогичную функциональность.
— Делегат выбора
— Контейнер
— Элемент управления
— Выдвижной ящик
— Рамка
— Делегат элемента
— Страница
— Индикатор страниц
— Панель
— Выпадающее окно
— Делегат радиокнопки
— Ползунок с диапазоном
— Круглая кнопка
— Скроллбар, Индикатор скролла Область прокрутки (Qt Quick Controls 1)
  • Qt Quick Controls 1: ScrollView предлагает аналогичную функциональность. Он объединяет горизонтальную и вертикальную полосы прокрутки, а также фон и рамку вокруг области прокрутки.
— — Стандартные пути (Платформа Qt Labs)
  • Диалоги Qt Quick: FileDialog предлагает свойство shortcut, которое можно использовать для доступа к наиболее распространённым стандартным путям.
  • Платформа Qt Labs: StandardPaths предлагает отдельный тип для полного доступа к стандартным путям.
— Делегат перетаскивания
— Представление перетаскивания
— Делегат переключателя
— — Значок системного трея (Платформа Qt Labs)
  • Платформа Qt Labs: SystemTrayIcon — это экспериментальный родной значок системного трея, который использует Qt Widgets в качестве резервного варианта на платформах, где родная реализация недоступна в слое абстракции платформы Qt.
— Панель вкладок, Кнопка вкладки Представление вкладок (Qt Quick Controls 1)
  • Qt Quick Controls 1: TabView предлагает аналогичную функциональность. Он объединяет панель вкладок, фон и рамку вокруг вкладок.
— Разделитель инструментов
— Подсказка
  • Qt Quick Controls 1: Button и Action имеют встроенные подсказки на основе Qt Widgets.
  • Qt Quick Controls: ToolTip может быть прикреплена к любому Item.

Связанная информация

  • Qt Quick
  • Типы QML Qt Quick Controls
  • Типы QML Qt Quick Controls 1
  • Типы QML Qt Quick Extras
  • Типы QML Qt Labs Calendar
  • Типы QML Qt Labs Platform

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qtquickcontrols2-differences.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API