Qt - 如何在样式表中格式化QColor?

6 投票
1 回答
7577 浏览
提问于 2025-04-17 09:26

在我的PyQt4程序中,我通过QColorDialog从用户那里获取一个颜色。
然后我需要把这个颜色格式化,以便在样式表中使用,目前我通过调用...

QColor.name()

... 得到的结果类似于'#00ff00',接着我会对这个字符串进行简单的处理,把它设置为一个控件的样式表,比如:

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

在程序的后面,我需要获取这个控件的背景颜色(使用.styleSheet()和一些简单的字符串处理),并把它转换成一个字符串,这个字符串在用eval()执行时,可以构造出一个相同颜色的QColor。

必须转换成QColor,因为后面会用到QBrush。QColor必须转换成一行字符串,因为它会被写入文件,并通过eval()从文件中导入。
(这个字符串在用eval()执行时必须传递颜色给QColor构造函数,因为字符串只有一行)。

最后,我需要类似这样的东西(虽然这种方式不可行):

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

当然,这种方法不行,因为QColor构造函数不接受像'#00ff00'这样的格式,而这是QColorDialog.name()给出的格式,也是QWidget.setStyleSheet()接受的格式。

我该如何实现这个呢?

有没有办法把像'#00ff00'这样的字符串转换成三个整数,分别代表红色、绿色和蓝色,然后可以传给QColor构造函数?
谢谢!

备注:
我知道像'#00ff00'这样的格式确实表示了这三种颜色,但我不明白'ff'是什么意思,而且调用QColor的.red()方法并不会返回'#00ff00'格式所暗示的整数。
显然我对颜色的理解还不够 :)

规格:
- PyQt4
- Python 2.7
- Windows 7

1 个回答

4

试试这个方法:QColor.setNamedColor(name)

举个例子:

string_with_color = '#00ff00'  # gathered somehow

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

但是我不明白'ff'是什么意思

ff在十六进制系统中代表255

编辑

从评论中可以看出,解决办法是把Python字符串转换成QString

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

撰写回答