2012-11-11 23 views
7

Come si ottiene una visualizzazione di dockwidgets/centralwidget in cui il dockwidget nello Qt::BottomDockWidgetArea o Qt::TopDockWidgetArea non occupa lo spazio Qt::LeftDockWidgetAreaQt::RighDockWidgetArea?Visualizzazione QDockWidget personalizzata

Questa è la visualizzazione reale, con 2 dockwidgets e il gadget centrale in alto a destra:

dockwidget display actual

Questa sarebbe la visualizzazione preferita:

dockwidget display preferred

+0

fa la fine di aggiungendoli alla 'QMainWindow' fare la differenza ? – cmannett85

+0

@ cmannett85 no, non fa differenza –

risposta

7

probabilmente dovreste usare le funzionalità angolo s' il QMainWindow per ottenere il comportamento che si voleva.

Qualcosa di simile può funzionare (non si può verificare se le sue compilazioni, 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. Soluzione molto migliore di quella che ho proposto. – ekhumoro

3

Sembra che il trucco (leggermente bizzarro) per farlo funzionare è impostare QMainWindow come il widget centrale della finestra principale.

Ecco un porto PyQt di questo 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_()) 
Problemi correlati