2012-11-11 7 views
7

Wie würden Sie eine Anzeige von dockwidgets/centralwidget, in dem die Dockwidget in der Qt::BottomDockWidgetArea oder Qt::TopDockWidgetArea nicht Qt::LeftDockWidgetArea noch Qt::RighDockWidgetArea Platz bekommen?Benutzerdefinierte QDockWidget Anzeige

Dies ist die eigentliche Anzeige, mit 2 dockwidgets und das zentrale Widget in der rechten oberen:

dockwidget display actual

Dies würde die bevorzugte Display sein:

dockwidget display preferred

+0

Hat die um sie an die 'QMainWindow' der Zugabe einen Unterschied machen ? – cmannett85

+0

@ cmannett85 nein, es macht keinen Unterschied –

Antwort

7

Sie sollten wahrscheinlich die QMainWindow ‚s Ecke Funktionalität verwenden Sie das Verhalten, das Sie wollten zu bekommen.

So etwas wie dies funktionieren kann (kann nicht testen, ob seine compiliert, sorry):

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

See: * QMainWindow::setCorner(...)

+0

+1. Viel bessere Lösung als ich vorgeschlagen habe. – ekhumoro

3

Es scheint, dass Der (etwas bizarre) Trick, um dies zum Laufen zu bringen, besteht darin, ein QMainWindow als zentrales Widget Ihres Hauptfensters einzurichten.

Hier ist ein PyQt Port dieses Qt FAQ example:

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