pyqt5 QGraphicsView添加按钮控件后,按钮控件的border-radius样式失效了,如何解决

pyqt5 QGraphicsView添加按钮控件后,按钮控件的border-radius样式失效了,为什么,如何解决?

https://blog.csdn.net/ActonMartin/article/details/104017794?utm_source=csdn_ai_ada_ask_robot

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

在QGraphicsView中添加控件后,通过stylesheets设置的border-radius样式失效,这是因为QGraphicsView中的控件使用的是QGraphicsWidget,它渲染控件时不应用stylesheet。要解决这个问题,有两种方法:

  1. 为控件设置GraphicsWidget属性,保留其原生样式:
python
button = QPushButton('Button')
button.setGraphicsWidget(True)

这会让按钮保留原生样式,border-radius等样式可以正常应用。

  1. 自定义控件的proxy widget,设置其stylesheet,作为控件的样式代理:
python 
class StyledButton(QGraphicsProxyWidget):
    def __init__(self, text):
        super().__init__()
        self.button = QPushButton(text)
        self.setWidget(self.button)
        self.button.setStyleSheet('/* Add styles here */')

button = StyledButton('Button')

StyledButton作为QGraphicsProxyWidget,承载了一个QPushButton。我们可以给StyledButton设置stylesheet,从而起到为按钮设置样式的作用。这种方法创建stylesheet可以全面生效。

所以,问题的原因是QGraphicsView中的控件使用QGraphicsWidget渲染,导致stylesheet不被应用。解决方法是利用QGraphicsProxyWidget作为 stylesheet 的代理,或是保留控件的原生样式使stylesheet生效。

希望这个解释能帮助你理解这个问题及解决方法。Qt是一个功能很强大的GUI框架,理解它的内部机制和原理可以帮助我们更好的使用它。