1

インタラクティブにサイズを変更しながら、ボーダレスダイアログの周りにフレームを描画したいのですが、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() )
4

1 に答える 1

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
        # [...]

これには、サイズグリップを自由に配置できるという利点があります。

于 2012-11-05T01:41:17.650 に答える