Отличия между 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 очень похож на 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 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.12/qtquickcontrols2-differences.html