2012-11-11 30 views
7

はどのようにQt::BottomDockWidgetAreaまたはQt::TopDockWidgetAreaでdockwidgetがQt::LeftDockWidgetAreaQt::RighDockWidgetAreaスペースを取りませんしたdockwidgets/centralwidgetの表示になるだろうか?カスタムQDockWidget表示

これは2 dockwidgetsと右上の中央ウィジェットと実際の表示、次のとおりです。

dockwidget display actual

これは、好ましいディスプレイのようになります。

dockwidget display preferred

+0

'QMainWindow'に追加する順序は違いを生むん? – cmannett85

+0

@ cmannett85いいえ、それは違いがありません –

答えて

7

あなたはおそらく、あなたが望んでいた動作を取得するためにQMainWindowのコーナーの機能を使用する必要があります。

このような何かが動作する可能性があり(申し訳ありませんが、そのコンパイルするかどうかをテストすることはできません):

mainWindow->setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); 
mainWindow->setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); 
mainWindow->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); 
mainWindow->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); 

参照してください:* QMainWindow::setCorner(...)

+0

+1。私が提案したよりもはるかに良い解決策。 – ekhumoro

3

それはと思われますこの作業を行うための(やや奇妙な)トリックは、メインウィンドウの中央ウィジェットとしてQMainWindowを設定することです。

は、ここでは、このQt FAQ exampleのPyQtはポートです:

from PyQt4 import QtGui, QtCore 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     self.setWindowTitle('Extended Side Dock Areas') 
     self.window = QtGui.QMainWindow(self) 
     self.window.setCentralWidget(QtGui.QTextEdit(self.window)) 
     self.window.setWindowFlags(QtCore.Qt.Widget) 
     self.setCentralWidget(self.window) 
     self.dock1 = QtGui.QDockWidget(self.window) 
     self.dock1.setWidget(QtGui.QTextEdit(self.dock1)) 
     self.window.addDockWidget(
      QtCore.Qt.BottomDockWidgetArea, self.dock1) 
     self.dock2 = QtGui.QDockWidget(self) 
     self.dock2.setAllowedAreas(
      QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea) 
     self.dock2.setWidget(QtGui.QLabel('Left Dock Area', self.dock2)) 
     self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dock2) 
     self.dock3 = QtGui.QDockWidget(self) 
     self.dock3.setWidget(QtGui.QLabel('Right Dock Area', self.dock3)) 
     self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dock3) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = MainWindow() 
    window.show() 
    sys.exit(app.exec_()) 
関連する問題