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。要解决这个问题,有两种方法:
python
button = QPushButton('Button')
button.setGraphicsWidget(True)
这会让按钮保留原生样式,border-radius等样式可以正常应用。
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框架,理解它的内部机制和原理可以帮助我们更好的使用它。