1

スタンドアロンの QDockWidget Maya の QDockWidget

Maya 用のツールを作成しました。また、QMainWindow 内で QDockWidget を使用して UI 全体を構成しました。あなたと私が知っているように、「saveState」と「restoreState」を使用して、QToolBar、QDockWidget などを保持できます。

理由はわかりませんが、Maya では実際の状態を「restoreState」することができません。QDockWidget のサイズを除いて、QToolBar、QDockWidget のすべての状態を復元できます。そこで、プログラムで QDockWidget のサイズを変更したいと思います。それを行う方法はありますか?

4

1 に答える 1

3

Dock-widget の最上位コンテンツ ウィジェットのsizeHintを再実装してみてください。

class MyWidget(QtGui.QWidget):
    _sizehint = None

    def setSizeHint(self, width, height):
        self._sizehint = QtCore.QSize(width, height)

    def sizeHint(self):
        if self._sizehint is not None:
            return self._sizehint
        return super(MyWidget, self).sizeHint()

アップデート

これを実装する 1 つの方法を示す簡単なデモを次に示します。

from PyQt4 import QtGui, QtCore

class DockContents(QtGui.QWidget):
    _sizehint = None

    def setSizeHint(self, width, height):
        self._sizehint = QtCore.QSize(width, height)

    def sizeHint(self):
        print('sizeHint:', self._sizehint)
        if self._sizehint is not None:
            return self._sizehint
        return super(MyWidget, self).sizeHint()

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.setCentralWidget(QtGui.QTextEdit(self))

        self.dock = QtGui.QDockWidget('Tool Widget', self)
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dock)

        contents = DockContents(self)
        contents.setSizeHint(400, 100)
        layout = QtGui.QVBoxLayout(contents)
        layout.setContentsMargins(0, 0, 0, 0)
        self.toolwidget = QtGui.QListWidget(self)
        layout.addWidget(self.toolwidget)

        self.dock.setWidget(contents)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 600, 400)
    window.show()
    sys.exit(app.exec_())
于 2013-11-04T17:58:58.443 に答える