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