Spec-Zone.ru › Qt 5.13

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

Портирование кода 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 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 1: Использует свойства Разметка для указания размеров.
  • Qt Quick Controls 2: Использует отдельные свойства Разделитель для указания размеров. Разрешает сохранять и восстанавливать состояние. Отдельный API для управления разделителями Ручка разделителя.
Стопка представлений, Делегат стопки представлений, Стопка Стопка представлений
  • 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.
Область ввода текста Область ввода текста
  • 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 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

Spec-Zone.ru

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