Пользовательский дисплей QDockWidget

Как бы вы получили отображение dockwidgets / centralwidget, в котором dockwidget в Qt::BottomDockWidgetArea или же Qt::TopDockWidgetArea не берет Qt::LeftDockWidgetArea ни Qt::RighDockWidgetArea пространство?

Это фактический дисплей, с двумя доки-виджетами и центральным виджетом в правом верхнем углу:

актуальное отображение дока

Это будет предпочтительный дисплей:

предпочтительнее отображение док-виджета

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

7

Другие решения

Кажется, что (немного странный) трюк, чтобы заставить это работать, состоит в том, чтобы установить QMainWindow в качестве центрального виджета вашего главного окна.

Вот PyQt порт этого Пример Qt FAQ:

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

По вопросам рекламы [email protected]