Spec-Zone.ru › Qt 5.14

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

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

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

  • 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

Spec-Zone.ru

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