gpt4 book ai didi

python - 如何阻止 PaintEvent 绘制子控件?

转载 作者:行者123 更新时间:2023-11-30 23:25:56 24 4
gpt4 key购买 nike

我正在尝试向QDialog添加圆角。我正在定义自己的 paintEvent 方法来创建圆角。它正在工作,但它为所有内容添加了圆形边框。甚至光标也有了边框。有什么办法可以禁用这种行为吗?

示例代码:

from PySide import QtCore, QtGui


class RenameDialog(QtGui.QDialog):
def __init__(self, parent=None, **kwargs):
super(RenameDialog, self).__init__(
parent=parent, f=QtCore.Qt.CustomizeWindowHint)
self.fieldA = QtGui.QLineEdit(self)
self.fieldB = QtGui.QLineEdit(self)

self.setLayout(QtGui.QHBoxLayout())
self.layout().addWidget(self.fieldA)
self.layout().addWidget(self.fieldB)

# Set background transparent. Only items drawn in paintEvent
# will be visible.
palette = QtGui.QPalette()
palette.setColor(QtGui.QPalette.Base, QtCore.Qt.transparent)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
self.setPalette(palette)

def paintEvent(self, event):
painter = QtGui.QPainter(self)
fillColor = QtGui.QColor(75, 75, 75, 255)
lineColor = QtCore.Qt.gray

painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.setPen(QtGui.QPen(QtGui.QBrush(lineColor), 2.0))
painter.setBrush(QtGui.QBrush(fillColor))
painter.drawRoundedRect(event.rect(), 15, 15)

我尝试使用 paintEvent 来执行此操作,因为:

  • QDialog 样式表不能使用border-radius。弯曲的边框确实出现了,但角落仍然可见。
  • QDialogs.setMask() 有效,但(据我所知)没有办法对 mask 进行反锯齿。

这是这样的:

borders everywhere

最佳答案

绘制事件被发送到带有需要更新的精确矩形的窗口/小部件,而不是小部件的整个边界矩形。当您调用 event.rect() 时,它会返回需要更新的矩形(据我所知)

尝试更改此行 painter.drawRoundedRect(event.rect(), 15, 15)对此 painter.drawRoundedRect(self.rect(), 15, 15)

编辑:您还需要在构造函数中的任意位置添加此行self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

enter image description here

希望这有帮助。

关于python - 如何阻止 PaintEvent 绘制子控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com