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

QStyleSheet - setting border-image for button also sets background image for its tooltip

我在设置 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() 信号连接到同一 class 中的插槽,其中状态发生变化(连同使用 self.setStyleSheet(...) 的样式)相对于系统的新状态是。

由于某些未知原因,我的工具提示收到按钮的样式更改 "belongs to":

我仔细检查了 Qt documentation,但我认为没有任何理由可以解释这种行为。我根本不想更改工具提示的样式。有什么解决办法吗?

我将问题解释为:

How to avoid overlapping the style intended for one widget type with another?

注意:

  • 样式表从父窗口小部件传播到子窗口小部件。
  • 样式表具有您可以为类型显式设置的可见性。


    myObj.setStyleSheet("QPushButton {border: 0.05em solid lightgray;}" )

只需将样式表与类型(例如QType { ... }.

我只处理 C++ Qt,但认为 PyQt 使用相同的样式表系统。