Я бы не использовал QDockWindow, так как кажется, что вы не будете использовать клиентскую область. Кроме того, вы не хотите закреплять границы MainWindow, а просто добавили виджет в MainWindow.
Я думаю, вы можете попробовать использовать несколько QWidget с QGridLayout. При перетаскивании QWidget за пределы MainWindow, просто удалите QWidget из макета. При перетаскивании внутри MainWindow добавьте QWidget в нужное место в QGridLayout. С помощью этого метода вы также можете переключать места виджета в главное окно.
Не знаю, достаточно ли это ясно, но я думаю о том же, как это делается в QtDesigner при перетаскивании новых элементов в макет При перетаскивании виджетов вы можете видеть место, куда они будут добавлены при отпускании кнопки мыши.
На мой взгляд, этот метод может быть тем, который вы ищете.
Надеюсь, что поможет