Различия между 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++ |
- Не официально поддерживается, но технически возможно через закрытые API
- Изменить можно только темы для конкретных стилей, стили фиксированы
- Производительность может быть не оптимальной
Перенос кода 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 Labs Calendar) |
|
| Флажок | Флажок | ||
| Комбо-поле | Комбо-поле | ||
| Группа исключающих элементов | — | Группа кнопок (Qt Quick Controls 2) |
|
| Группа элементов | Группа элементов | ||
| Метка | Метка | ||
| Меню | Меню | Меню (Qt Labs Platform) |
|
| Панель меню | — | Панель меню (Qt Labs Platform) |
|
| Пункт меню, Разделитель меню | Пункт меню, Разделитель меню | Пункт меню, Разделитель меню (Qt Labs Platform) |
|
| Полоса прогресса | Полоса прогресса | ||
| Радиокнопка | Радиокнопка | ||
| Прокручиваемое представление | Прокручиваемое представление | ||
| Ползунок | Ползунок | ||
| Поле ввода | Поле ввода | ||
| Разделитель представлений | — | ||
| Стэковая область, Делегат стековой области, Стековая область | Стэковая область |
|
|
| Строка состояния | — | Панель инструментов (Qt Quick Controls 2) |
|
| Переключатель | Переключатель | ||
| Представление вкладок, Вкладка | — | Панель вкладок, Кнопка вкладки (Qt Quick Controls 2) |
|
| Таблица | — | ||
| Многострочное поле | Многострочное поле |
|
|
| Поле ввода текста | Поле ввода текста | ||
| Панель инструментов | Панель инструментов | ||
| Инструментальная кнопка | Инструментальная кнопка | ||
| Дерево | — | ||
| Qt Quick Dialogs | Qt Quick Controls 2 | Альтернативы | Замечания |
| Диалог | — | Диалог |
|
| Диалоговое окно выбора цвета, Диалоговое окно выбора файла, Диалоговое окно выбора шрифта, Диалоговое окно сообщения | — | Диалоговое окно выбора цвета, Диалоговое окно выбора файла, Диалоговое окно выбора папки, Диалоговое окно выбора шрифта, Диалоговое окно сообщения (Платформа Qt Labs) |
|
| Qt Quick Extras | Qt Quick Controls 2 | Альтернативы | Замечания |
|---|---|---|---|
| Цифровая шкала | — | ||
| Кнопка с задержкой | Кнопка с задержкой | ||
| Цифровая шкала | Цифровая шкала | ||
| Индикатор | — | ||
| Изображение | — | ||
| Меню круговой диаграммы | — | ||
| Индикатор состояния | — | ||
| Переключатель | — | ||
| Регулировка, Столбец регулятора | Регулировка |
|
|
| Без предшественника | Qt Quick Controls 2 | Альтернативы | Замечания |
| — | Абстрактная кнопка | ||
| — | Группа кнопок | Исключительная группа (Qt Quick Controls 1) |
|
| — | Делегат с флажком | ||
| — | Контейнер | ||
| — | Элемент управления | ||
| — | Ящик | ||
| — | Рамка | ||
| — | Делегат элемента | ||
| — | Страница | ||
| — | Индикатор страниц | ||
| — | Панель | ||
| — | Выпадающее меню | ||
| — | Делегат радиокнопки | ||
| — | Ползунок диапазона | ||
| — | Кнопка круглой формы | ||
| — | Скроллбар, Индикатор скролла | Область просмотра (Qt Quick Controls 1) |
|
| — | — | Стандартные пути (Платформа Qt Labs) |
|
| — | Делегат свайпа | ||
| — | Просмотр свайпа | ||
| — | Делегат переключателя | ||
| — | — | Иконка системного трея (Платформа Qt Labs) |
|
| — | Панель вкладок, Кнопка вкладки | Просмотр вкладок (Qt Quick Controls 1) |
|
| — | Разделитель инструментов | ||
| — | Подсказка |
|
Связанная информация
- 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