Spec-Zone.ru › Qt 5.12

Отличия между 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 очень похож на 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 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 предлагает свойство shortcut, которое можно использовать для доступа к наиболее распространённым стандартным путям.
  • Платформа 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.12/qtquickcontrols2-differences.html

Spec-Zone.ru

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