QStyleSheet - 为按钮设置边框图像也为其工具提示设置背景图像
Posted
技术标签:
【中文标题】QStyleSheet - 为按钮设置边框图像也为其工具提示设置背景图像【英文标题】:QStyleSheet - setting border-image for button also sets background image for its tooltip 【发布时间】:2016-04-20 14:11:45 【问题描述】:我在设置QToolButton
的border-image
属性时遇到了问题(稍后也是QPushButton
,但我认为问题也会在那里发生)。我的每个自定义按钮(分别继承自 QToolButton
和 QPushButton
)必须有 3 种状态 - 非活动、运行和错误。
非活动:
style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: none;'
跑步:
style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: rgb(89, 205, 139);'
错误:
style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: rgb(215, 56, 56);'
self.cornerRadius
是用于确定按钮圆度的某个数字(以像素为单位),self.icon
是我从某处检索到的图标。
我在按钮的构造函数(以及其他简单的初始化)中所做的只是
self.setStyleSheet(style)
按钮的clicked()
信号连接到与系统的新状态相关的同一类中的状态更改(以及使用self.setStyleSheet(...)
的样式)的插槽。
由于某些未知原因,我的工具提示收到了它“所属”按钮的样式更改:
我已经仔细检查了Qt documentation,我认为没有任何理由可以解释这种行为。我根本不想更改工具提示的样式。任何想法如何解决这个问题?
【问题讨论】:
【参考方案1】:我将问题解释为:
如何避免将用于一种小部件类型的样式与 另一个?
请注意:
样式表从父小部件传播到子小部件。样式表具有您可以为类型显式设置的可见性。
myObj.setStyleSheet("QPushButton border: 0.05em solid lightgray;" )
只需将样式表与类型括起来即可,例如QType ...
.
我只处理 C++ Qt,但认为 PyQt 使用相同的样式表系统。
【讨论】:
facepalm 我完全忘记了样式表的父子传播。感谢您指出这一点,并扩大答案以涵盖一般情况。 PS:就样式表而言,在 PyQt 中完成 Qt C++ 时也是如此。以上是关于QStyleSheet - 为按钮设置边框图像也为其工具提示设置背景图像的主要内容,如果未能解决你的问题,请参考以下文章