Как создать пользовательский элемент управления 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 цвета.

Таким образом, вы можете определить свой собственный набор цветов в одиночном, установить любой стиль, который вы используете для этих цветов, и использовать те же цвета в ваших пользовательских материалах. Таким образом, вы добьетесь единообразия между вещами, стилизованными по умолчанию, и вашими элементами, а изменения цвета будут влиять на все, независимо от того, какой стиль вы используете.

Другие вопросы по тегам