Стиль Imagine
Стиль Imagine основан на конфигурируемых изображениях. Подробнее...
| Оператор импорта: | import QtQuick.Controls.Imagine 2.12 |
| С: | Qt 5.10 |
Прикреплённые свойства
- path : строка
Подробное описание
Стиль Imagine основан на изображениях. Стиль поставляется с набором стандартных изображений, но изображения можно легко изменить, предоставив каталог с изображениями, использующими предопределённую систему именования.
Стиль Imagine со стандартными изображениями
Чтобы запустить приложение со стилем Imagine, см. Использование стилей в Qt Quick Controls.
Имена файлов
Файлы изображений имеют следующую структуру имён:
<control>-<element>-<states>
Разделы <control> и <element> обязательны, но раздел <states> необязателен. Например, если для кнопки предоставлен один файл с именем "button-background.9.png", он будет использоваться для каждого состояния, которое Button поддерживает. Разработчик сам выбирает набор состояний, для которых будут предоставлены изображения. Тем не менее, рекомендуется предоставлять изображения для наиболее распространённых состояний элементов управления, таких как disabled, pressed, и т. д. Это гарантирует, что интерактивные элементы управления визуально будут вести себя так, как ожидается от конечного пользователя.
Справочник по элементам
В следующей таблице перечислены поддерживаемые элементы для каждого элемента управления, а также возможные состояния для этого элемента и ожидаемое расширение файла. Элемент — это изображение, которое представляет определённую визуальную часть элемента управления. Например, элемент Button "background" представляет его фон.
| Контроль | Элемент | Состояния | Расширение |
|---|---|---|---|
| Окно приложения | фон | активный | .9.png (или .png) |
| Индикатор выполнения | анимация | отключен, выполняется, зеркально, наведён | .webp |
| фон | то же, что и выше | .webp | |
| Кнопка | фон | отключен, нажат, выбран, с возможностью выбора, фокусирован, выделен, плоская, зеркально, наведён | .9.png |
| Флажок | фон | отключен, нажат, выбран, частично выбран, фокусирован, зеркально, наведён | .9.png (или .png) |
| индикатор | то же, что и выше | .png | |
| Делегат флажка | фон | отключен, нажат, выбран, частично выбран, фокусирован, выделен, зеркально, наведён | .9.png (или .png) |
| индикатор | то же, что и выше | .png | |
| Комбо-поле | фон | отключен, нажат, редактируемое, открыто, фокусирован, зеркально, наведён, плоская | .9.png (или .png) |
| индикатор | то же, что и выше | .png | |
| выпадающее меню | то же, что и выше | .9.png (или .png) | |
| Кнопка с задержкой | фон | отключен, нажат, выбран, с возможностью выбора, фокусирован, зеркально, наведён | .9.png (или .png) |
| прогресс | то же, что и выше | .9.png (или .png) | |
| маска | то же, что и выше | .9.png (или .png) | |
| Цифровой регулятор | фон | отключен, нажат, фокусирован, зеркально, наведён | .9.png (или .png) |
| ручка | то же, что и выше | .9.png (или .png) | |
| Диалоговое окно | фон | модальное, затемнённое | .9.png (или .png) |
| заголовок | то же, что и выше | .9.png (или .png) | |
| перекрытие | модальное | .9.png (или .png) | |
| Группа кнопок диалогового окна | фон | отключен, зеркально | .9.png (или .png) |
| Шторка | фон | модальное, затемнённое, верх, слева, справа, низ | .9.png (или .png) |
| перекрытие | модальное | .9.png (или .png) | |
| Рамка | фон | отключен, зеркально | .9.png (или .png) |
| Группа элементов | фон | отключен, зеркально | .9.png (или .png) |
| заголовок | то же, что и выше | .9.png (или .png) | |
| Делегат элемента | фон | отключен, нажат, фокусирован, выделен, зеркально, наведён | .9.png (или .png) |
| Метка | фон | отключен, зеркально, наведён | .9.png (или .png) |
| Меню | фон | модальное, затемнённое | .9.png (или .png) |
| перекрытие | модальное | .9.png (или .png) | |
| Элемент меню | стрелка | отключен, нажат, выбран, фокусирован, выделен, зеркально, наведён | .png |
| фон | то же, что и выше | .9.png (или .png) | |
| индикатор | то же, что и выше | .png | |
| Разделитель меню | фон | отключен, зеркально | .9.png (или .png) |
| разделитель | то же, что и выше | .9.png (или .png) | |
| Страница | фон | отключен, зеркально | .9.png (или .png) |
| Индикатор страниц | фон | отключен, зеркально, наведён | .9.png (или .png) |
| делегат | отключен, нажат, текущий, зеркально, наведён | .png | |
| Панель | фон | отключен, зеркально | .9.png (или .png) |
| Поп-ап | фон | модальное, затемнённое | .9.png (или .png) |
| перекрытие | модальное | .9.png (или .png) | |
| Полоса прогресса | анимация | отключен, зеркально, наведён | .png |
| фон | отключен, неопределённый, зеркально, наведён | .9.png (или .png) | |
| маска | то же, что и выше | .9.png (или .png) | |
| прогресс | то же, что и выше | .9.png (или .png) | |
| Радиокнопка | фон | отключен, нажат, выбран, фокусирован, зеркально, наведён | .9.png (или .png) |
| индикатор | то же, что и выше | .png | |
| Делегат радиокнопки | фон | отключен, нажат, выбран, фокусирован, выделен, зеркально, наведён | .9.png (или .png) |
| индикатор | то же, что и выше | .png | |
| Двухточечный ползунок | фон | вертикально, горизонтально, отключен, фокусирован, зеркально, наведён | .9.png (или .png) |
| Двухточечный ползунок | прогресс | то же, что и выше | .9.png (или .png) |
| ручка | первая, вторая, вертикально, горизонтально, отключен, нажат, фокусирован, зеркально, наведён | .png | |
| Кнопка круглой формы | фон | отключен, нажат, выбран, с возможностью выбора, фокусирован, выделен, плоская, зеркально, наведён | .9.png (или .png) |
| Скроллбар | фон | вертикально, горизонтально, отключен, интерактивно, нажат, зеркально, наведён | .9.png (или .png) |
| ручка | то же, что и выше | .9.png (или .png) | |
| Индикатор скролла | фон | вертикально, горизонтально, отключен, зеркально, наведён | .9.png (или .png) |
| ручка | то же, что и выше | .9.png (или .png) | |
| Скроллвью | фон | отключен, зеркально | .9.png (или .png) |
| Ползунок | фон | вертикально, горизонтально, отключен, нажат, фокусирован, зеркально, наведён | .9.png (или .png) |
| ручка | то же, что и выше | .9.png (или .png) | |
| прогресс | то же, что и выше | .9.png (или .png) | |
| Поле ввода | фон | отключен, редактируемое, фокусирован, зеркально, наведён | .9.png (или .png) |
| редактор | отключен, фокусирован, зеркально, наведён | .9.png (или .png) | |
| индикатор | вверх, вниз, отключен, редактируемое, нажат, фокусирован, зеркально, наведён | .9.png (или .png) | |
| Стопка представлений | фон | отключен, зеркально | .9.png (или .png) |
| Делегат свайпа | фон | отключен, нажат, фокусирован, выделен, зеркально, наведён | .9.png (или .png) |
| Свайпвью | фон | вертикально, горизонтально, отключен, интерактивно, фокусирован, зеркально | .9.png (или .png) |
| Переключатель | фон | отключен, нажат, выбран, фокусирован, зеркально, наведён | .9.png (или .png) |
| ручка | то же, что и выше | .9.png (или .png) | |
| индикатор | то же, что и выше | .9.png (или .png) | |
| Делегат переключателя | фон | отключен, нажат, выбран, фокусирован, выделен, зеркально, наведён | .9.png (или .png) |
| ручка | то же, что и выше | .9.png (или .png) | |
| индикатор | то же, что и выше | .9.png (или .png) | |
| Панель вкладок | фон | отключен, заголовок, подвал, зеркально | .9.png (или .png) |
| TabButton | background | disabled, pressed, checked, focused, mirrored, hovered | .9.png (or .png) |
| TextArea | background | disabled, focused, mirrored, hovered | .9.png (or .png) |
| TextField | background | disabled, focused, mirrored, hovered | .9.png (or .png) |
| ToolBar | background | disabled, header, footer, mirrored | .9.png (or .png) |
| ToolButton | background | disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered | .9.png (or .png) |
| ToolSeparator | background | vertical, horizontal, disabled, mirrored | .9.png (or .png) |
| separator | same as above | .9.png (or .png) | |
| ToolTip | background | .9.png (or .png) | |
| Tumbler | background | disabled, focused, mirrored, hovered | .9.png (or .png) |
Примеры активов
В следующей таблице перечислены примеры активов (взятые из набора активов Imagine по умолчанию) для всех элементов управления. Список не является исчерпывающим, так как не все элементы нуждаются в активах, но он может служить руководством при создании собственных активов.
| Элемент управления | Элемент | Состояния | Ресурс | Примечания |
|---|---|---|---|---|
| Окно приложения | фон | См. сноску 1 | ||
| наложение | См. сноску 1 | |||
| наложение | модальное | См. сноску 1 | ||
| Кнопка | фон | |||
| фон | отключено | |||
| фон | фокусировано | |||
| фон | нажато | |||
| фон | выбрано | |||
| фон | выбрано, отключено | |||
| фон | выбрано, фокусировано | |||
| фон | выбрано, наведено | |||
| фон | выделено | |||
| фон | выделено, отключено | |||
| фон | выделено, фокусировано | |||
| фон | выделено, наведено | |||
| фон | выделено, нажато | |||
| фон | выделено, выбрано | |||
| фон | наведено | |||
| фон | плоский | |||
| фон | плоский, отключено | |||
| фон | плоский, наведено | |||
| фон | плоский, нажато | |||
| фон | плоский, выбрано | |||
| Флажок | индикатор | |||
| индикатор | отключено | |||
| индикатор | нажато | |||
| индикатор | выбрано | |||
| индикатор | выбрано, нажато | |||
| индикатор | выбрано, наведено |
| индикатор | выбранный, сфокусированный | |||
| индикатор | частично, выбранный | |||
| индикатор | частично, выбранный, нажат | |||
| индикатор | частично, выбранный, сфокусированный | |||
| индикатор | частично, выбранный, наведён | |||
| индикатор | сфокусированный | |||
| индикатор | наведён | |||
| CheckDelegate | фон | |||
| фон | отключен | |||
| фон | нажат | |||
| фон | сфокусированный | |||
| фон | наведён | |||
| индикатор | ||||
| индикатор | отключен | |||
| индикатор | нажат | |||
| индикатор | выбранный | |||
| индикатор | выбранный, нажат | |||
| индикатор | выбранный, сфокусированный | |||
| индикатор | выбранный, наведён | |||
| индикатор | сфокусированный | |||
| индикатор | наведён | |||
| индикатор | частично, выбранный | |||
| индикатор | частично, выбранный, нажат | |||
| индикатор | частично, выбранный, сфокусированный | |||
| индикатор | частично, выбранный, наведён | |||
| индикатор | наведён | |||
| ComboBox | фон | |||
| фон | отключен | |||
| фон | сфокусированный | |||
| фон | наведён | |||
| фон | нажат |
| фон | открыто | |||
| фон | редактируемо | |||
| фон | редактируемо, фокусировано | |||
| фон | редактируемо, отключено | |||
| индикатор | ||||
| индикатор | отключено | |||
| индикатор | редактируемо | |||
| индикатор | редактируемо, отключено | |||
| индикатор | редактируемо, зеркально | |||
| индикатор | редактируемо, зеркально, отключено | |||
| поп-меню | ||||
| Кнопка с задержкой | фон | |||
| фон | отключено | |||
| фон | отключено, отмечено | |||
| фон | фокусировано | |||
| фон | нажато | |||
| фон | отмечено | |||
| фон | отмечено, фокусировано | |||
| фон | отмечено, наведено | |||
| фон | наведено | |||
| прогресс | ||||
| прогресс | отключено | |||
| маска |
| Циферблат | фон | |||
| фон | выключен | |||
| фон | фокусирован | |||
| ручка | ||||
| ручка | выключен | |||
| ручка | фокусирован | |||
| ручка | фокусирован, нажат | |||
| ручка | фокусирован, наведён | |||
| ручка | нажат | |||
| ручка | наведён | |||
| Диалог | фон | |||
| перекрытие | См. сноску 1 |
| перекрытие | модальное | См. сноску 1 | ||
| DialogButtonBox | фон | |||
| Drawer | фон | слева | ||
| фон | справа | |||
| фон | верх | |||
| фон | низ | |||
| перекрытие | См. сноску 1 | |||
| перекрытие | модальное | См. сноску 1 | ||
| Frame | фон | |||
| GroupBox | фон | |||
| заголовок | ||||
| ItemDelegate | фон | |||
| фон | отключен | |||
| фон | нажатие | |||
| фон | фокусировка | |||
| фон | наведение | |||
| фон | выделение | |||
| Меню | фон | |||
| MenuItem | фон | |||
| фон | выделено | |||
| стрелка | ||||
| стрелка | зеркальное отображение | |||
| стрелка | отключено | |||
| стрелка | зеркальное отображение, отключено | |||
| индикатор | ||||
| индикатор | отключен | |||
| индикатор | нажатие | |||
| индикатор | выбрано | |||
| индикатор | выбрано, нажатие | |||
| индикатор | выбрано, фокусировка |
| индикатор | выбранный, наведён курсор | |||
| индикатор | получил фокус | |||
| индикатор | наведён курсор | |||
| Разделитель меню | разделитель | |||
| Страница | фоновый цвет | См. сноску 1 | ||
| Индикатор страниц | представитель | |||
| представитель | отключён | |||
| представитель | отключён, текущий | |||
| представитель | нажат | |||
| представитель | текущий | |||
| Панель | фоновый цвет | |||
| Поп-ап окно | фоновый цвет | См. сноску 1 | ||
| наложение | См. сноску 1 | |||
| наложение | модальное | |||
| Полоса прогресса | фоновый цвет | |||
| прогресс | ||||
| маска | ||||
| Радиокнопка | индикатор | |||
| индикатор | отключён | |||
| индикатор | нажат | |||
| индикатор | выбран | |||
| индикатор | выбран, фокус | |||
| индикатор | выбран, наведён курсор | |||
| индикатор | выбран, нажат | |||
| индикатор | фокус | |||
| индикатор | наведён курсор | |||
| Представитель радиокнопки | фоновый цвет | |||
| фоновый цвет | отключён | |||
| фоновый цвет | нажат |
| фон | сфокусированный | |||
| фон | наведённый | |||
| индикатор | ||||
| индикатор | отключён | |||
| индикатор | нажатый | |||
| индикатор | выбран | |||
| индикатор | выбран, сфокусирован | |||
| индикатор | выбран, наведён | |||
| индикатор | выбран, нажатый | |||
| индикатор | сфокусирован | |||
| индикатор | наведён | |||
| RangeSlider | фон | вертикальный | ||
| фон | горизонтальный | |||
| прогресс | вертикальный | |||
| прогресс | вертикальный, отключён | |||
| прогресс | горизонтальный | |||
| прогресс | горизонтальный, отключён | |||
| ручка | ||||
| ручка | отключён | |||
| ручка | сфокусирован | |||
| ручка | сфокусирован, наведён | |||
| ручка | сфокусирован, нажат | |||
| ручка | наведён | |||
| ручка | нажат | |||
| RoundButton | фон |
| фон | отключено | |||
| фон | отключено, отмечено | |||
| фон | сфокусировано | |||
| фон | нажато | |||
| фон | отмечено | |||
| фон | отмечено, сфокусировано | |||
| фон | отмечено, наведено | |||
| фон | выделено | |||
| фон | выделено, нажато | |||
| фон | выделено, сфокусировано | |||
| фон | выделено, наведено | |||
| фон | наведено | |||
| Скроллбар | ручка | |||
| ручка | отключено | |||
| ручка | интерактивная | |||
| ручка | интерактивная, отключено | |||
| ручка | интерактивная, нажато | |||
| ручка | интерактивная, наведено | |||
| Индикатор скролла | ручка | |||
| Ползунок | фон | вертикальный | ||
| фон | горизонтальный | |||
| прогресс | вертикальный | |||
| прогресс | вертикальный, отключено | |||
| прогресс | горизонтальный | |||
| прогресс | горизонтальный, отключено |
| кнопка | ||||
| кнопка | отключена | |||
| кнопка | сфокусирована | |||
| кнопка | сфокусирована, наведена | |||
| кнопка | сфокусирована, нажата | |||
| кнопка | наведена | |||
| кнопка | нажата | |||
| Поле ввода | фон | |||
| фон | отключен | |||
| фон | сфокусирован | |||
| фон | редактируемый | |||
| индикатор | вверх | |||
| индикатор | вверх, отключен | |||
| индикатор | вверх, нажат | |||
| индикатор | вверх, сфокусирован | |||
| индикатор | вверх, зеркально | |||
| индикатор | вверх, наведен | |||
| индикатор | вверх, редактируемый | |||
| индикатор | вверх, редактируемый, нажат | |||
| индикатор | вверх, редактируемый, сфокусирован | |||
| индикатор | вверх, редактируемый, зеркально | |||
| индикатор | вверх, редактируемый, наведен | |||
| индикатор | вниз | |||
| индикатор | вниз, отключен | |||
| индикатор | вниз, нажат | |||
| индикатор | вниз, сфокусирован | |||
| индикатор | вниз, зеркально | |||
| индикатор | вниз, наведен |
| индикатор | вниз, редактируемый | |||
| индикатор | вниз, редактируемый, нажат | |||
| индикатор | вниз, редактируемый, фокусирован | |||
| индикатор | вниз, редактируемый, зеркально | |||
| индикатор | вниз, редактируемый, наведен | |||
| SwipeDelegate | фон | |||
| фон | отключен | |||
| фон | нажат | |||
| фон | фокусирован | |||
| фон | наведен | |||
| Switch | индикатор | |||
| индикатор | отключен | |||
| индикатор | нажат | |||
| индикатор | выбрано | |||
| индикатор | выбрано, фокусирован | |||
| индикатор | выбрано, наведен | |||
| индикатор | выбрано, нажат | |||
| индикатор | фокусирован | |||
| индикатор | наведен | |||
| ручка | ||||
| ручка | отключен | |||
| ручка | нажат | |||
| SwitchDelegate | фон | |||
| фон | отключен | |||
| фон | нажат | |||
| фон | фокусирован | |||
| фон | наведен | |||
| индикатор |
| индикатор | отключен | |||
| индикатор | нажатый | |||
| индикатор | отмеченный | |||
| индикатор | отмеченный, фокусирован | |||
| индикатор | отмеченный, наведён | |||
| индикатор | отмеченный, нажатый | |||
| индикатор | фокусирован | |||
| индикатор | наведён | |||
| ручка | ||||
| ручка | отключен | |||
| Вкладка | фон | |||
| Кнопка вкладки | фон | |||
| фон | отключен | |||
| фон | нажатый | |||
| фон | отмеченный | |||
| фон | наведён | |||
| фон | отключен, отмеченный | |||
| Текстовая область | фон | |||
| фон | отключен | |||
| фон | фокусирован | |||
| Поле ввода текста | фон | |||
| фон | отключен | |||
| фон | фокусирован | |||
| Панель инструментов | фон | |||
| Кнопка инструмента | фон | |||
| фон | отключен, отмеченный | |||
| фон | фокусирован | |||
| фон | нажатый |
| фон | выбрано | |||
| фон | выбрано, сфокусировано | |||
| фон | выбрано, наведено | |||
| фон | наведено | |||
| Разделитель инструментов | разделитель | горизонтальный | ||
| разделитель | вертикальный | |||
| Подсказка | фон |
1 Изображение 1x1, содержащее один цвет, растянутое для заполнения элемента управления.
Изображения 9-панели
Стиль Imagine использует изображения 9-панели, чтобы предоставить дизайнерам контроль над тем, как конкретный элемент реагирует на изменение размера. Вот пример изображения 9-панели, представляющего фон кнопки, наряду с увеличенной версией (для более легкого просмотра линий 9-панели):
Размер изображения составляет 44 пикселя в ширину и 32 пикселя в высоту. Каждое изображение 9-панели требует однопиксельной линии (в совокупности называемой «линиями 9-панели») вокруг каждой стороны, поэтому фактический размер изображения становится 46 пикселей в ширину и 34 пикселя в высоту. Обратите внимание, что толщина линий 9-панели должна быть равна одному пикселю независимо от DPI изображения. Например, линии 9-панели для button-background.9.png и button-background@2x.9.png должны быть толщиной в один пиксел.
Линии 9-панели должны быть черного цвета, а остальные области — прозрачными или белыми:
Растяжимые области
Линии 9-патч на верхнем и левом краях определяют, какие части изображения будут растягиваться при изменении размера.
Ниже приведены примеры изменения размера изображения 9-патч до полутора размеров оригинального размера в различных измерениях:
Области отступа
Линии 9-патч на правом и нижнем краях определяют, сколько места доступно для элемента содержимого компонента, а это означает, что они также могут рассматриваться как определяющие отступ. Для диаграммы, иллюстрирующей отступ, см. Макет компонента.
Ниже приведены дополнительные примеры изменения размера изображения 9-патч, но на этот раз демонстрируется, как работают линии отступа 9-патч.
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAggAAAGGCAMAAAApcIlkAAAAtFBMVEVHcEwGCQwAAACHzvuHzvkKDxQAAACHzvqHzfqHzvuI0P6HzvqHzvuI0PmKz/qHzvqR0vuw3/zJ6f7L6fzQ7P7R7P6K//+l2vuHzvr///+k2vuM0PqR0vqW1Pub1vui2fud1/ue1/ug2PuP0fqU0/uIz/qO0fqKz/qT0/qZ1fuX1fuJz/oAAACs3vzW7/7c8f7A5v3H6f3O6/3p9v664/2X1Pu04fz3/P+q3Pzj9P7u+P4AlZiUKuDpAAAAPHRSTlMA1/ioiAgzzDN3EvPgKUnBYZysub2zSf////////////////////////////////////////////////jqhx2vAAAgAElEQVR42uydaZebuBKGZyb3TJLJMvfDPUc0XrCx223TYTXB4P//w24tYrHB08FH3RI9qg8Q5KUl8SDVWyU5v/1mzZo1a9asWbNmzZo1a9asWbNmzZo1a9asWbNmzZo1a9asWbNmzZo1a9asaba/vn/4+NV52crIUWq/9H1fPv79+dsrtCV2JmGv0Ue3uu7zF/iuRw2d92vfhzX7+5vpbXk1EJT30S379lVxpZxX+b7PhrdFLwgj+uiWff8yolbPils55vs+KG7LVExxH918hqbTd5/fUVu09dFN+zihVn5/R23R1Ue37L/qPdjX+76PStvynlTDL/fRTfuqtfPGft93g9tigrN4/5DwyZkUCB8MbospINznL/7nFT3YV/i+ryrb8h5Vw0t9dNM+TKxT/npHbdHRRzft74k18ts7aouOPlIluDSrBsf5pLAt71M1/HMfmdp5o7/v3whCbEGwIJgKgm7VoBKE96oa3gYE3fbJBpgtCBYEg3wEqxqsarDOonUWLQgWBKsarGqwzuK/yFkskmTuONM5/lOyPcmyFPpBZFn203F2cArhMudSFy4PjjODU9GW+nC7grMsLeAMpxWcfC7NZenMcZZw8uAy5dIQLneO8xNOgksTWQoV3cKphMuES0u43DrOXFapU9GAq9SpqAeXS8d5uqwSVnR9WdHHXpVkRe8C4X9pCjXMf/VYHtMsdPc5Hhd0PNBxBa+Grg/H0vWSNBWuC0ePjr7rpmm6ouPSw2Pg43G7crP4POavw/H3P/74488bbUmjKCMvO4qgfzdwwj5L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
contentItem может занимать столько места, сколько ему необходимо внутри затенённых областей. Если линии отступов отсутствуют, то contentItem будет занимать столько места, сколько нужно, не выходя за пределы растягиваемых областей.
Внутренние области
В некоторых случаях для элемента управления требуется тень, например. Однако, если мы добавим тень к кнопке выше, это повлияет на её размер, что создаёт проблемы как для выравнивания, так и для границ области клика/взаимодействия с сенсорным экраном.
Внутренние области учитывают это, сообщая элементу управления, что определённая область изображения 9-patch должна выходить за пределы элемента управления:
На изображении ниже пунктирная линия представляет область нажатия кнопки, а также пространство, которое она займёт в макете. Тень отмечена полосатой областью позади неё:
На изображении ниже пунктирная линия представляет область нажатия кнопки, а также пространство, которое она займёт в макете. Тень отмечена полосатой областью позади неё:
Экспорт изображений 9-patch
Для создания изображений 9-patch, подходящих для использования со стилем Imagine, можно использовать различные векторные и растровые редакторы. В следующих разделах кратко описывается процесс экспорта для каждого редактора, а в последнем разделе объясняется, как убедиться, что экспортированные изображения соответствуют требованиям 9-patch.
Illustrator
См. документацию Adobe по панели экспорта ресурсов.
Inkscape
Для экспорта ресурсов с Inkscape можно использовать расширение Inkscape 9-Patch Export.
Photoshop
См. документацию Adobe по генерации ресурсов изображения из слоёв.
Sketch
См. документацию Sketch по экспорту.
Qt Quick Controls также предоставляет плагин для Sketch, который автоматически исправляет толщину линий 9-patch после экспорта ресурсов. Для установки этого файла дважды щелкните по нему. После того, как Sketch подтвердит установку плагина экспорта 9-patch, плагин автоматически обработает изображения при их экспорте.
Исправление линий 9-patch
При экспорте изображений 9-patch в нескольких вариантах DPI (@2x, @3x, и т. д.), линии 9-patch обычно масштабируются вместе с изображением. Существует несколько способов исправить это, но, возможно, самый простой подход - использовать инструмент ImageMagick's mogrify. Утилита имеет функцию -shave, которая может быть использована для обрезки изображения, чтобы уменьшить толщину линий 9-patch:
mogrify -shave 1x1 -path path/to/images *@2x.9.png mogrify -shave 2x2 -path path/to/images *@3x.9.png mogrify -shave 3x3 -path path/to/images *@4x.9.png
Обычные изображения DPI (без префикса @Nx ) не затрагиваются, поэтому команду необходимо выполнить только для изображений, предназначенных для дисплеев с высоким разрешением.
Анимированные изображения
Стиль Imagine поддерживает анимированные форматы изображений WebP и GIF.
Настройка
Путь
Стиль Imagine позволяет настраивать путь, используемый для выбора ресурсов изображения. Путь можно задать для любого окна или элемента, и он автоматически распространяется на потомков так же, как и шрифты. В следующем примере окно и все три радиокнопки отображаются с тёмными ресурсами изображения (файлы расположены в "qrc:/themes/dark").
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.Imagine 2.12
ApplicationWindow {
visible: true
Imagine.path: "qrc:/themes/dark"
Column {
anchors.centerIn: parent
RadioButton { text: qsTr("Small") }
RadioButton { text: qsTr("Medium"); checked: true }
RadioButton { text: qsTr("Large") }
}
} |
Помимо указания пути в QML, также можно указать его через переменную среды или в файле конфигурации. Атрибуты, указанные в QML, имеют приоритет перед всеми другими методами.
Файл конфигурации
| Переменная | Описание |
|---|---|
Path |
Указывает путь к каталогу, содержащему ресурсы стиля Imagine. Если не указано, используются встроенные ресурсы. Например, для указания пути к каталогу, хранящемуся в системе ресурсов: [Imagine] Path=:/imagine-assets Для указания относительного пути к локальному каталогу: [Imagine] Path=imagine-assets Примечание: Из-за технического ограничения, путь не должен называться «imagine», если он относительный к файлу |
См. Файл конфигурации Qt Quick Controls для получения дополнительных сведений о файле конфигурации.
Переменные среды
| Переменная | Описание |
|---|---|
QT_QUICK_CONTROLS_IMAGINE_PATH |
Указывает путь к каталогу, содержащему ресурсы стиля Imagine. Если не указано, используются встроенные ресурсы. Например, для указания пути к каталогу, хранящемуся в системе ресурсов: QT_QUICK_CONTROLS_IMAGINE_PATH=:/imagine-assets Для указания относительного пути к локальному каталогу: QT_QUICK_CONTROLS_IMAGINE_PATH=imagine-assets Примечание: Из-за технического ограничения, путь не должен называться «imagine», если он относительный к файлу |
См. Поддерживаемые переменные среды в Qt Quick Controls для получения полного списка поддерживаемых переменных среды.
Палитра
Стиль Imagine поддерживает настройку палитры через свойство palette и файл qtquickcontrols2.conf. Как и в других стилях, точные роли палитры, которые использует стиль Imagine, зависят от стиля. Однако, поскольку большая часть визуального отображения элементов управления (например, фоны) управляется ресурсами изображений, только роли, которые обычно используются для текста, будут иметь эффект.
Шрифт
Пользовательские шрифты можно задать через свойство font и файл конфигурации.
Зависимость
Для доступа к атрибутам, специфичным для стиля Imagine, необходимо отдельно импортировать стиль. Следует отметить, что независимо от ссылок на стиль Imagine, тот же код приложения работает с любым другим стилем. Атрибуты, специфичные для Imagine, имеют эффект только при запуске приложения со стилем Imagine.
Если стиль Imagine импортирован в файле QML, который всегда загружается, стиль Imagine необходимо развернуть с приложением, чтобы приложение могло запускаться независимо от того, с каким стилем оно запускается. Используя выбор файлов, можно применять изменения, специфичные для стиля, без создания жёсткой зависимости от стиля.
См. также Стилевание Qt Quick Controls
Документация по присоединённому свойству
Imagine.path : string
Это присоединённое свойство содержит путь к ресурсам изображений...
Button {
Imagine.path: "qrc:/themes/dark"
} Связанная информация
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qtquickcontrols2-imagine.html