2013-11-04 105 views
1

QDockWidget in standalone QDockWidget in MayaPyQt的:在玛雅

我做了玛雅的工具调整qdockwidget。我在QMainWindow中使用QDockWidget来完成UI的组成。正如你所知,我可以“saveState”和“restoreState”来保留QToolBar,QDockWidget等等。

我不知道原因,但在Maya中我无法“恢复状态”的实际状态。它可以恢复QToolBar,QDockWidget的所有状态,但QDockWidget的大小除外。所以我想尝试以编程方式调整QDockWidget的大小。有没有办法做到这一点?

回答

3

拉升坞的小部件的顶层内容插件重新实现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() 

UPDATE

这里有一个简单的演示,显示实现一个方法:

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_()) 
+0

谢谢你的回复。你的意思是我必须尝试重新实现** QDockWidget的内容WIDGET **? –

+0

@炫恩金。是 - 传递给'dockwidget.setWidget()'的小部件。或者,您可以像我的回答一样创建一个简单的包装小部件,并使其成为当前内容小部件的父项。 – ekhumoro

+0

我试过了。但是,没有任何调用sizeHint的重新实现的小部件... :( –