В спокойном приложении, которое мы разрабатываем, мы должны отобразить несколько 'Окон средства просмотра' (для отображения данных в плоскости XY, плоскости YX, плоскости XZ и в 3D).
Мы надеялись использовать модель MDI-приложения, но позже клиент попросил требование перетаскивать и представление 'Viewer windows' в нескольких рабочих столах (использующий несколько мониторов). Это не может быть сделано с помощью модели окна MDI, потому что мы не можем переместить окно MDI вне Окна главного приложения.
Только возможный путь состоит в том, чтобы использовать окна Dock, потому что они могут быть расстыкованы от Окна главного приложения и перемещения в другие рабочие столы, но окон Dock, основных используемый для палитр инструментов или служебных окон.
(http://doc.qt.nokia.com/4.6/qdockwidget.html#details)
Действительно ли это - хорошая практика для использования окна Dock для нашего требования?
Я бы не стал использовать QDockWindow, поскольку, похоже, вы не будете использовать клиентскую область. Кроме того, вы не хотите пристыковываться к границам MainWindow, а просто добавить виджет к MainWindow.
Я думаю, вы можете попробовать использовать несколько QWidget с QGridLayout. При перетаскивании QWidget за пределы MainWindow, просто удалите QWidget из макета. При перетаскивании внутри главного окна добавьте QWidget в нужное место в QGridLayout. С помощью этого метода вы также можете менять местами виджеты в Главном окне.
Не знаю, достаточно ли понятно, но я думаю о том же, как это делается в QtDesigner при перетаскивании новых элементов в макет. При перетаскивании виджетов вы можете видеть место, куда он будет добавлен при отпускании кнопки мыши.
На мой взгляд, этот метод может быть тем, который вы ищете.
Надеюсь, это поможет