我希望在无边界对话框周围绘制一个框架,同时交互式调整大小,但似乎QDialog.setSizeGripEnabled(True)
和QWidget.resizeEvent
不能很好地协同工作。对话框无法以交互方式调整大小,这是一个已知问题吗?
class MyDialog(QtGui.QDialog):
def __init__(self,x,y):
QtGui.QDialog.__init__(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setGeometry(x,y,250,300)
self.setSizeGripEnabled(True)
self.frame = QtGui.QFrame(self)
self.frame.setGeometry(self.rect())
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Plain)
etc...
def resizeEvent( self, event ):
r = self.rect()
s = event.size()
self.frame.setGeometry( r.x(), r.y(), s.width(), s.height() )
答案 0 :(得分:0)
这里的问题是,你覆盖resizeEvent
而没有传递它,这似乎打破了生成的大小手柄的功能。
最简单的解决方案是致电:
super(MyDialog, self).resizeEvent(event)
在您的事件处理程序中。另一个选择是将您自己的QResizeGrip
添加到您的框架中:
class MyDialog(QtGui.QDialog):
def __init__(self,x,y):
# [...]
self.frame.setLayout(QtGui.QVBoxLayout())
self.sizeGrip = QtGui.QSizeGrip(self.frame)
self.frame.layout().addWidget(self.sizeGrip, 0,
QtCore.Qt.AlignRight | QtCore.Qt.AlignBottom)
self.setStyleSheet("QSizeGrip {background-color: #202020}") # make it visible
# [...]
这样做的好处是可以自由排列尺寸。