Различия между Qt Quick Controls
Qt Quick Controls изначально разрабатывались для поддержки настольных платформ, вскоре после чего появилась поддержка мобильных и встроенных систем. Они обладают очень широким функционалом, предоставляя систему стилей, достаточно гибкую для разработки приложений с платформенно-зависимым или платформенно-независимым стилем.
На встроенных системах, где аппаратное обеспечение имеет ограниченные ресурсы, такой подход может быть неэффективным. Qt Quick Controls 2 были разработаны для решения этой проблемы, используя бенчмарки в качестве руководства для разработки.
C++ и QML
Во многих случаях внутреннее состояние элемента управления можно более эффективно обрабатывать в C++. Например, обработка событий ввода в C++ положительно сказывается на элементах управления, которые в противном случае потребовали бы создания внутренних MouseArea и связанных объектов 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 очень похож на 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 Календарь) |
|
| Флажок | Флажок | ||
| Комбобокс | Комбобокс | ||
| Группа взаимного исключения | — | Группа действий, Группа кнопок (Qt Quick Controls 2) |
|
| Группа | Группа | ||
| Метка | Метка | ||
| Меню | Меню | Меню (Qt Labs Платформа) |
|
| Панель меню | Панель меню | Панель меню (Qt Labs Платформа) |
|
| Элемент меню, Разделитель меню | Элемент меню, Разделитель меню | Элемент меню, Разделитель меню (Qt Labs Платформа) |
|
| Полоса прогресса | Полоса прогресса | ||
| Радиокнопка | Радиокнопка | ||
| Область прокрутки | Область прокрутки | ||
| Ползунок | Ползунок | ||
| Поле ввода | Поле ввода | ||
| Разделенное представление | — | ||
| Стэк-представление, Делегат стэк-представления, Стэк | Стэк-представление |
|
|
| Строка состояния | — | Панель инструментов (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 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/archives/qt-5.11/qtquickcontrols2-differences.html