QStyleSheet - 为按钮设置边框图像也为其工具提示设置背景图像

Posted

技术标签:

【中文标题】QStyleSheet - 为按钮设置边框图像也为其工具提示设置背景图像【英文标题】:QStyleSheet - setting border-image for button also sets background image for its tooltip 【发布时间】:2016-04-20 14:11:45 【问题描述】:

我在设置QToolButtonborder-image 属性时遇到了问题(稍后也是QPushButton,但我认为问题也会在那里发生)。我的每个自定义按钮(分别继承自 QToolButtonQPushButton)必须有 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 - 为按钮设置边框图像也为其工具提示设置背景图像的主要内容,如果未能解决你的问题,请参考以下文章

wpf中如何彻底去除按钮边框?

提交按钮有斜面我无法摆脱

怎么设置html的text文本框的边框颜色和粗细?怎么给button按钮加背景图片?

以编程方式在图像中加载纹理并将边框设置为图像 Unity

为按钮添加边框和阴影

如何将自定义边边框设置为图像并使其显示在其他图像上?