Отличия от Qt Quick Controls 1
Qt Quick Controls 1 изначально разрабатывался для поддержки настольных платформ, а поддержка мобильных и встраиваемых систем появилась вскоре после этого. Они обладают очень широким функционалом, предоставляя систему стилей, достаточно гибкую для разработки приложений с зависимыми или независимыми от платформы стилями.
В системах встраиваемого типа, где аппаратные средства имеют ограниченные ресурсы, такой подход может быть неэффективным. 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 1 | Qt Quick Controls 2 | |
|---|---|---|
| Стилевые делегаты | Да | Да |
| Готовые встроенные стили | Да | Нет |
| Изменение стиля/темы во время выполнения | Да 1 | Да 2 |
| Можно использовать на настольных системах | Да | Да |
| Можно использовать на мобильных системах | Да 3 | Да |
| Можно использовать на встраиваемых системах | Да 3 | Да |
| Внутренняя обработка событий | QML | C++ |
- Не поддерживается официально, но технически возможно через закрытые API
- Можно менять только темы для определенных стилей, стили фиксированы
- Производительность может быть не оптимальной
Портирование кода Qt Quick Controls 1
API Qt Quick Controls 2 очень похож на API Qt Quick Controls 1, но он содержит некоторые изменения, необходимые для улучшения. Большинство изменений касаются стилей; все делегаты элемента управления теперь доступны в самом элементе управления, а не в отдельном объекте стиля.
Например, для стилизации кнопки в Qt Quick Controls 1:
Button {
style: ButtonStyle {
label: Label {
// ...
}
}
} Для стилизации кнопки в Qt Quick Controls 2:
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 2. Если прямой альтернативы нет, то в третьей колонке указана альтернатива, обеспечивающая сходную функциональность. В последней колонке приведены некоторые замечания об отличиях между типами в разных модулях.
| Qt Quick Controls 1 | Qt Quick Controls 2 | Альтернативы | Замечания |
|---|---|---|---|
| Действие | Действие | Сочетание клавиш (Qt Quick) | |
| Окно приложения | Окно приложения | ||
| Индикатор выполнения | Индикатор выполнения | ||
| Кнопка | Кнопка | ||
| Календарь | — | Список месяцев, Строка дней недели, Столбец номеров недель (Qt Labs Календарь) |
|
| Флажок | Флажок | ||
| Комбо-поле | Комбо-поле | ||
| Группа взаимного исключения | — | Группа действий, Группа кнопок (Qt Quick Controls 2) |
|
| Группа | Группа | ||
| Метка | Метка | ||
| Меню | Меню | Меню (Qt Labs Платформа) |
|
| Панель меню | Панель меню | Панель меню (Qt Labs Платформа) |
|
| Элемент меню, Разделитель меню | Элемент меню, Разделитель меню | Элемент меню, Разделитель меню (Qt Labs Платформа) |
|
| Полоса прогресса | Полоса прогресса | ||
| Радиокнопка | Радиокнопка | ||
| Прокручиваемое поле | Прокручиваемое поле | ||
| Ползунок | Ползунок | ||
| Поле ввода | Поле ввода | ||
| Разделитель | Разделитель |
|
|
| Стопка представлений, Делегат стопки представлений, Стопка | Стопка представлений |
|
|
| Строка состояния | — | Панель инструментов (Qt Quick Controls 2) |
|
| Переключатель | Переключатель | ||
| Вкладка представлений, Вкладка | — | Панель вкладок, Кнопка вкладки (Qt Quick Controls 2) |
|
| Таблица представлений | — | Новая Таблица представлений находится в модуле Qt Quick. | |
| Область ввода текста | Область ввода текста |
|
|
| Поле ввода текста | Поле ввода текста | ||
| Панель инструментов | Панель инструментов | ||
| Кнопка инструмента | Кнопка инструмента | ||
| Дерево представлений | — | ||
| 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 Quick Controls 1) |
|
| — | — | Стандартные пути (Платформа Qt Labs) |
|
| — | Делегат свайпа | ||
| — | Прокручиваемое представление свайпа | ||
| — | Делегат переключателя | ||
| — | — | Иконка системного трея (Платформа Qt Labs) |
|
| — | Панель вкладок, Кнопка вкладки | Представление вкладок (Qt Quick Controls 1) |
|
| — | Разделитель инструментов | ||
| — | Подсказка |
|
Связанная информация
- Qt Quick
- Типы QML Qt Quick Controls 2
- Типы 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.13/qtquickcontrols2-differences.html