Qt - формат QColor для использования в таблице стилей? - PullRequest
5 голосов
/ 03 января 2012

В моей программе PyQt4 я получаю QColor от пользователя через QColorDialog.
Затем мне нужно отформатировать этот QColor для использования в таблице стилей, чего я в настоящее время достигаю, вызывая ...

QColor.name()

... который возвращает что-то вроде '# 00ff00', которое затем подвергается простой манипуляции со строками для установки в качестве таблицы стилей для виджета.Например:

QWidget.setStyleSheet( '* { background-color: '+ QColor.name() + ' }')

Позже в программе должен быть выбран цвет фона виджета (с использованием .styleSheet () и более простых манипуляций со строками) и преобразован в строку, которая, когда eval () ed, будетсоздайте QColor идентичного цвета.

Он должен быть преобразован в QColor, так как он позже используется в QBrush.QColor должен быть преобразован в однострочную строку , поскольку он записывается в файл и импортируется из указанного файла с помощью eval ().
(Строка, когда eval () ed должна передатьцвет для конструктора QColor , так как строка - только одна строка).

В конце мне нужно что-то похожее (хотя и невозможно таким образом), например:

ColorString = str( QtGui.QColorDialog.getColor().name() )
EvalString = "QtGui.QColor(" + ColorString +")"

Конечно, этот метод не работает, потому что конструктор QColor не принимает такой формат, как '# 00ff00', который является форматом, который предоставляет QColorDialog.name () и который принимает QWidget.setStyleSheet ().

Как я могу на самом деле добиться этого?

Есть ли в любом случае преобразовать строку типа '# 00ff00' в 3 целых числа, представляющих красный, зеленый и синий, которые затем можно было бы отправить конструктору QColor?
Спасибо!

Примечание:
Я понимаю, что такой формат '# 00ff00' включает в себя представление этих трех цветов, но я не понимаю, что означает 'ff', и вызываю .red () дляQColor невернуть целое число, предложенное в формате «# 00ff00».
Вероятно, очевидно, что я не понимаю цвета:)

Спецификации:
- PyQt4
- Python 2.7
- Windows 7

1 Ответ

3 голосов
/ 03 января 2012

Попробуйте QColor.setNamedColor (имя)

Пример:

string_with_color = '#00ff00'  # gathered somehow

color = QtGui.QColor(0, 0, 0)
color.setNamedColor(string_with_color)

но я не понимаю, что означает "ff"

ff = 255 в шестнадцатеричной системе

EDIT

Как следует из комментариев, решением было преобразовать строку Python в QString

EvalString = "QtGui.QColor(QtCore.QString(" + ColorString +"))"
...