Spec-Zone.ru › Qt 5.11

Различия между 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++
  1. Не официально поддерживается, но технически возможно через закрытые API
  2. Можно менять только темы для конкретных стилей, стили фиксированы
  3. Производительность может быть не оптимальной

Перевод кода 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 Labs Календарь: MonthGrid, DayOfWeek, и WeekNumberColumn являются экспериментальными нестилизованными базовыми блоками для представления календаря.
Флажок Флажок
Комбобокс Комбобокс
Группа взаимного исключения — Группа действий, Группа кнопок (Qt Quick Controls 2)
  • Qt Quick Controls 2: ActionGroup и ButtonGroup предлагают аналогичную функциональность.
Группа Группа
Метка Метка
Меню Меню Меню (Qt Labs Платформа)
  • Qt Quick Controls 1: Menu является родным на платформах, где реализация доступна в слое абстракции платформы Qt. На других платформах используется всплывающее окно QML для верхнего уровня меню. Menu поддерживает традиционные каскадные подменю, но не работает в Embedded Linux, потому что EGLFS не поддерживает несколько окон верхнего уровня.
  • Qt Quick Controls 2: Menu — это неродное Item-based всплывающее окно, которое размещается поверх содержимого приложения. Из-за этого всплывающие меню ограничены границами окна. Menu полностью настраивается с помощью QML и Qt Quick и позволяет добавлять любые Items. Отсутствуют традиционные функции, ориентированные на настольные компьютеры, такие как каскадные подменю и отображение сочетаний клавиш.
  • Qt Labs Платформа: Menu — это экспериментальное родное меню, которое использует Qt Widgets в качестве резервного варианта на платформах, где родная реализация недоступна в слое абстракции платформы Qt.
Панель меню Панель меню Панель меню (Qt Labs Платформа)
  • Qt Quick Controls 1: MenuBar является родным на платформах, где реализация доступна в слое абстракции платформы Qt. На других платформах используется элемент панели меню QML, расположенный в верхней части окна.
  • Qt Quick Controls 2: MenuBar — это неродная панель меню на основе QML, которую можно полностью настроить с помощью QML и Qt Quick.
  • Qt Labs Платформа: MenuBar — это экспериментальная родная панель меню. Она доступна только на платформах, где родная реализация доступна в слое абстракции платформы Qt.
Элемент меню, Разделитель меню Элемент меню, Разделитель меню Элемент меню, Разделитель меню (Qt Labs Платформа)
  • Qt Quick Controls 1: MenuItem и MenuSeparator являются родными на платформах, где реализация доступна в слое абстракции платформы Qt. На других платформах используются элементы и разделители меню на основе QML.
  • Qt Quick Controls 2: MenuItem и MenuSeparator — это неродные элементы и разделители меню на основе QML, которые можно полностью настроить с помощью QML и Qt Quick.
  • Qt Labs Платформа: MenuItem и MenuSeparator — это экспериментальные родные элементы и разделители меню.
Полоса прогресса Полоса прогресса
Радиокнопка Радиокнопка
Область прокрутки Область прокрутки
Ползунок Ползунок
Поле ввода Поле ввода
Разделенное представление —
Стэк-представление, Делегат стэк-представления, Стэк Стэк-представление
  • Qt Quick Controls 2: StackView предоставляет настраиваемые переходы и присоединённые свойства через единственный тип StackView.
Строка состояния — Панель инструментов (Qt Quick Controls 2)
  • Qt Quick Controls 2: ApplicationWindow позволяет назначить любой элемент или компонент, такой как ToolBar, в качестве заголовка или подвала.
Переключатель Переключатель
Представление вкладок, Вкладка — Панель вкладок, Кнопка вкладки (Qt Quick Controls 2)
  • Qt Quick Controls 2: TabBar и TabButton предлагают аналогичную функциональность и могут использоваться для построения представлений с вкладками.
Таблица —
Область текста Область текста
  • Qt Quick Controls 1: TextArea наследует ScrollView и поэтому всегда является прокручиваемым редактором.
  • Qt Quick Controls 2: TextArea — это более простой редактор многострочного текста, который можно дополнительно присоединить к Flickable для обеспечения функций прокрутки. Это позволяет использовать TextArea на странице с прокруткой, без необходимости в двух вложенных областях прокрутки, что может быть проблематично и создавать неудобства.
Поле ввода текста Поле ввода текста
Панель инструментов Панель инструментов
Кнопка инструмента Кнопка инструмента
Дерево —
Qt Quick Dialogs Qt Quick Controls 2 Альтернативы Замечания
Диалог — Диалог
  • Qt Quick Dialogs: Dialog — это либо окно верхнего уровня, либо всплывающее окно Item-based в зависимости от того, поддерживает ли основная платформа несколько окон верхнего уровня.
  • Qt Quick Controls 2: Dialog — это не окно верхнего уровня, а всплывающее окно Item-based, которое накладывается поверх содержимого приложения. Из-за этого диалоги ограничены границами окна.
Диалоговое окно выбора цвета, Диалоговое окно выбора файла, Диалоговое окно выбора шрифта, Диалоговое окно сообщения — Диалоговое окно выбора цвета, Диалоговое окно выбора файла, Диалоговое окно выбора папки, Диалоговое окно выбора шрифта, Диалоговое окно сообщения (Платформа Qt Labs)
  • Диалоговые окна Qt Quick: Диалоговые окна являются нативными на платформах, где реализация доступна в слое абстракции платформы Qt. На других платформах используются либо Qt Widgets, либо диалоговые окна на основе QML, в зависимости от поддержки подлежащей платформой нескольких окон верхнего уровня.
  • Платформа Qt Labs: Экспериментальные нативные диалоговые окна, которые используют Qt Widgets в качестве резервного варианта на платформах, где нативная реализация недоступна в слое абстракции платформы Qt.
Qt Quick Extras Qt Quick Controls 2 Альтернативы Примечания
Цифровая шкала —
Кнопка с задержкой Кнопка с задержкой
Цифровая шкала Цифровая шкала
Индикатор —
Изображение —
Круговое меню —
Индикатор состояния —
Переключатель —
Переключатель, Столбец переключателя Переключатель
  • Qt Quick Extras: Tumbler может состоять из нескольких столбцов.
  • Qt Quick Controls 2: Tumbler представляет собой единственное вращающееся колесо. Несколько столбцов можно создать, разместив несколько Tumblers рядом друг с другом.
Нет предшественника Qt Quick Controls 2 Альтернативы Примечания
— Абстрактная кнопка
— Группа действий Группа исключительных элементов (Qt Quick Controls 1)
  • Qt Quick Controls 1: ExclusiveGroup предлагает аналогичную функциональность.
— Группа кнопок Группа исключительных элементов (Qt Quick Controls 1)
  • Qt Quick Controls 1: ExclusiveGroup предлагает аналогичную функциональность.
— Делегат проверки
— Контейнер
— Элемент управления
— Панель
— Рамка
— Делегат элемента
— Страница
— Индикатор страницы
— Панель
— Подменю
— Делегат радиокнопки
— Ползунок диапазона
— Кнопка круглой формы
— Скроллбар, Индикатор скролла Область прокрутки (Qt Quick Controls 1)
  • Qt Quick Controls 1: ScrollView предлагает аналогичную функциональность. Он объединяет горизонтальную и вертикальную полосы прокрутки, а также фон и рамку вокруг области прокрутки.
— — Стандартные пути (Платформа Qt Labs)
  • Диалоговые окна Qt Quick: FileDialog предлагает свойство сокращения, которое можно использовать для доступа к наиболее распространенным стандартным путям.
  • Платформа Qt Labs: StandardPaths предлагает отдельный тип для полного доступа к стандартным путям.
— Делегат свайпа
— Представление свайпа
— Делегат переключателя
— — Иконка системного трея (Платформа Qt Labs)
  • Платформа Qt Labs: SystemTrayIcon — это экспериментальная нативная иконка системного трея, которая использует Qt Widgets в качестве резервного варианта на платформах, где нативная реализация недоступна в слое абстракции платформы Qt.
— Панель вкладок, Кнопка вкладки Представление вкладок (Qt Quick Controls 1)
  • Qt Quick Controls 1: TabView предлагает аналогичную функциональность. Он объединяет панель вкладок, фон и рамку вокруг вкладок.
— Разделитель инструментов
— Подсказка
  • Qt Quick Controls 1: Button и Action имеют встроенные подсказки на основе Qt Widgets.
  • Qt Quick Controls 2: ToolTip может быть прикреплена к любому Item.

Связанная информация

  • 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API