2012-11-11 39 views
7

Làm cách nào bạn có được hiển thị dockwidgets/centralwidget trong đó dockwidget trong các Qt::BottomDockWidgetArea hoặc Qt::TopDockWidgetArea không mất Qt::LeftDockWidgetArea cũng không phải Qt::RighDockWidgetArea không gian?Hiển thị QDockWidget tùy chỉnh

Đây là màn hình hiển thị thực tế, với 2 dockwidgets và widget trung tâm ở phía trên bên phải:

dockwidget display actual

Đây sẽ là màn hình hiển thị ưa thích:

dockwidget display preferred

+0

Liệu trình tự thêm chúng vào 'QMainWindow' tạo sự khác biệt ? – cmannett85

+0

@ cmannett85 không, không có sự khác biệt –

Trả lời

7

có lẽ bạn nên sử dụng chức năng góc 's QMainWindow để có được hành vi mà bạn muốn.

Something như thế này có thể làm việc (không thể kiểm tra xem biên dịch của nó, xin lỗi):

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

Xem: * QMainWindow::setCorner(...)

+0

+1. Giải pháp tốt hơn nhiều so với tôi đề xuất. – ekhumoro

3

Dường như lừa (hơi kì lạ) để làm việc này là đặt một QMainWindow làm widget trung tâm của cửa sổ chính của bạn.

Dưới đây là một cổng PyQt của Qt FAQ example này:

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