Вопрос по – Использование переменных в qt StyleSheets

12

Есть ли возможность присвоить имя переменной шестнадцатеричным / rgb числам в файле .qss. Для а

myColor = #FFCC08
QPushButton { background-color: myColor;}

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

Я также искалSaas но не знаю, как это можно использовать в Qt.

Спасибо :)

Ваш Ответ

3   ответа
3

То, что вы пытаетесь выполнить, просто невозможно, используя чистые таблицы стилей Qt.

Вы можете добиться аналогичного эффекта, изменив и перезагрузив таблицы стилей из своего кода C ++, например:

QString myColor = "#FFCC08";
QString styleSheet = "QPushButton { background-color: %1;}";
...
myWidget->setStyleSheet( styleSheet.arg(myColor) );

К сожалению, у этого есть несколько недостатков (невозможность предварительного просмотра в дизайнере, изменение кода, а не таблицы стилей), но он настолько близок, насколько вы можете достичь того, чего вы пытаетесь достичь с помощью Qt.

Да, я понимаю, но проблема с вышеуказанным подходом заключается в том, что мы указываем свойства таблицы стилей в коде c ++ для каждого компонента, а не читаем из файла .qss. Спасибо за ваше время. SAM
0

Вот решение с использованиемпререкаться, Во-первых, установите привязки Python:

pip install sass

Затем используйте его:

import sys
import sass
app = QApplication(sys.argv)

# Create your sass style sheet (you can also write this in a file and load the file)
style = '''
$bg-dark: #292929;

QPushButton {
color: red;
background-color: $bg-dark;
}
'''.encode('utf-8')

# Compile Sass to CSS
style = sass.compile_string(style).decode()

# And set it to your app
app.setStyleSheet(style)
Если вы все равно используете Python, почему бы не использовать встроенное форматирование строк с kwargs вместоsass? Например.'... background-color: {bg_dark}; ...'.format(..., bg_dark='#292929', ...)
Хороший вопрос, который работает тоже для этого конкретного ответа. Но sass может сделать больше, чем просто заменить переменные, такие как миксины, импорт, вложенные правила и т. Д. В конце концов, вы можете намного проще и элегантнее оформлять сложные приложения.
12

Вы можете легко создать свой собственный маленький Sass:

1. Создайте текстовый файл с определениями переменных. Используйте простой формат, как это:

@myColor  = #FFDDEE
@myColor2 = #112233 
@myWidth  = 20px

2.В файле qss используйте имена переменных:

QPushButton { 
    background-color: @myColor; 
    min-width: @myWidth;
}

3. Откройте оба файла и для каждой переменной в файле определения измените ее вхождение в файле qss на значение (строку) из файла определения. Это простая замена строки.

4. Примените предварительно обработанную QSS в приложении.

Это самое простое решение. Вы можете изменить как файл определения, так и файл qss вне приложения и применить его без перекомпиляции кода.

Спасибо за ваше время. Я использовал ту же логику, чтобы создать свой собственный анализатор, который заменяет каждый настраиваемый переменный цвет, определенный в файле .qss, фактическим цветом. SAM

Похожие вопросы