Как создать пользовательский элемент управления QML, который учитывает цвета стиля материала?
Я создаю пользовательский элемент управления в QML для моего приложения. Я хочу работать как на рабочем столе, так и на Android, поэтому я использую Material Style для приложения. Это применяет цветовую схему ко всем существующим элементам управления Qt Quick Controls 2 (кнопки, панели инструментов и т. Д.). Но как мне использовать эти цвета на моем контроле? Я знаю, что могу использовать одни и те же цвета с шестнадцатеричным кодом или чем-то еще, но я хочу, чтобы цвета моего элемента управления менялись, если я изменял цвет акцента в теме и т. Д.
я пробовал SystemPalette
но цвета там не соответствуют стилю материала, а всегда следуют стилю по умолчанию.
Могу ли я получить доступ к цветам материала? Что произойдет, если приложение будет запущено в нематериальном режиме?
3 ответа
Просто разобрался. Установить id
на любом фактическом контроле, тогда вы можете получить доступ к "дополнительным" цветам как controlId.Material.buttonColor
так далее
Вы можете импортировать стили:
import QtQuick.Controls.Material 2.2
или же
import QtQuick.Controls.Universal 2.2
Цвета затем доступны через синглтон:
console.log(Material.accent)
console.log(Material.primary)
// etc...
Текущий стиль может быть получен из C++ с помощью QQuickStyle (вам нужно связать с Qt5QuickControls2
библиотека)
Помните, что вы также можете установить стиль цвета. И это не такая уж сложная тема, в каждом стиле 3-4 цвета.
Таким образом, вы можете определить свой собственный набор цветов в одиночном, установить любой стиль, который вы используете для этих цветов, и использовать те же цвета в ваших пользовательских материалах. Таким образом, вы добьетесь единообразия между вещами, стилизованными по умолчанию, и вашими элементами, а изменения цвета будут влиять на все, независимо от того, какой стиль вы используете.