LINUX.ORG.RU

QML и стили

 ,


0

3

Вот, допустим, пилю я свою виртуальную клавиатуру, а там у меня собственно сама клавиатура сделана с помощью QML (никогда не работал с ним раньше, но решил, что редактировать раскладки в Qt Creator удобнее, чем вручную высчитывать координаты, а в отличии от QtWidgets можно будет легко добавить загрузку новых раскладок из внешних файлов). Было бы не плохо дать пользователю возможность выбирать один из нескольких стилей оформления.

Как это правильно сделать в случае с QML? В случае с QtWidgets можно было загрузить CSS, в котором можно было бы прописать любые поддерживаемые параметры вида для любого объекта на форме (там ведь можно делать селекторы по именам и по классам объектов).

Я с одной стороны не хотел бы ограничивать возможности стайлинга (типа позволить менять только цвет фона и цвет текста, нет - пусть меняются все доступные атрибуты), а с другой стороны не хочу изобрать велосипед (не писать же свой парсер CSS в самом деле). Какое решение было бы наиболее правильным для Qt Quick интерфейса? Суть в том, чтобы можно было заменить 1 файлик и оформление могло полностью измениться, но при этом остался бы прежним набор и логика элементов.

★★★★★

Почему бы qml и не воспользоваться? Написал ты свою клавиатуру в Keyboard.qml и все чего хочешь там менять забиндил на внешние переменные property type something или на алиасы. А уже поверх пишешь файлики к примеру ExtraKeyboard.qml и в нем - Keyboard { property1: someval; property2: otherval }

wolph ★★
()

Я тоже думаю что тащить CSS это серьезный оверхед. У нас в клавиатуре сколько всего элементов настраивающихся? Максимум 10?

Создадим файл Style.qml с подобным содержанием:

import QtQuick 2.0

Item {
    property string keyboardBackground: "#fffffb"
    property string keyboardBorder: "#bbbbbf"

    property string buttonBackground: "#bffffb"
    property string buttonBorder: "#deadbe"

    property string primaryTextColor: "#222"
    property string secondaryTextColor: "#555"
}

Потом в main.qml создаем объект этого типа, подгружаем его в property и используем глобально в программе вместо хардкода.

CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Можно еще сделать в клавиатуре лоадер который грузит компонент, и этот комонент заалиасить на свойство в топе, а уже это свойство переопределять в «стилях». Хочешь пишешь там image, хочешь - градиент.

wolph ★★
()
Ответ на: комментарий от CrossFire

Да ничего и не сложно, я часто этим способом пользовался. Из профитов - хорошая гибкость.

wolph ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.