Spec-Zone.ru › Qt 5.9

Различия между Qt Quick Controls

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

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

C++ и QML

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

Стили

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

import "controls" as Controls

Controls.Button {
    ...
}

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

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

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

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

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

  • Qt Quick
  • Типы QML Qt Quick Controls 2
  • Типы QML Qt Quick Controls
  • Типы 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.9/qtquickcontrols2-differences.html

Spec-Zone.ru

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