Отличия от 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.14/qtquickcontrols2-differences.html