Перетаскивание QDockWidgets между QMainWindows

У меня вопрос относительно перетаскивания QDockWidgets между QMainWindows. У меня есть приложение с разными «DockAreas», у которых есть член QMainWindow с одним или несколькими QDockWidgets. Кроме того, я хочу сделать QDockWidgets перетаскиваемым в другие, уже плавающие QDockWidgets (без вкладок!).

Чтобы иметь приятный эффект наведения при перетаскивании, плавающие QDockWidgets встраиваются в новый экземпляр моей DockArea с членом QMainWindow. Теперь я перехватываю событие mousemove перетаскиваемого QDockWidget и меняю его родительский элемент, когда он наводит курсор на другой QMainWindow моего DockArea. К сожалению, это вызывает сбой, и похоже, что исходный QLayoutItem, в котором находился этот QDockWidget, исчез.

void QDockWidgetPrivate::moveEvent(QMoveEvent *event)
{
    // ...
    // now this widgetItem member of state is kaputt
    layout->hover(state->widgetItem, globalMousePos);
}

Я нашел разные предложения по перетаскиванию QDockWidgets между QMainWindows в Интернете:

1) Воспитание детей - вот что я пытаюсь сделать

2) QDrag - у меня не сработало, async exec () ломает мое приложение, и в конце мне все равно придется переродить

3) Вызвать addDockWidget (...) нового QMainWindow - закрепить QDockWidget, и мне пришлось бы снова сделать его плавающим и каким-то образом «продолжить перетаскивание»

Я открыт для любых новых предложений :) Заранее спасибо!


person CppChris    schedule 09.02.2016    source источник
comment
Теперь в их системе отслеживания ошибок открыта проблема: bugreports.qt.io/browse/QTBUG-64595 < / а>   -  person thejinx0r    schedule 30.11.2018


Ответы (1)


Я сейчас борюсь с той же проблемой и хочу поделиться.

ПЯ нашел это сообщение на форуме, посвященное той же проблеме: http://www.qtcentre.org/threads/41847-Dragging-QDockWidgets-between-QMainWindows Это решение, однако, ошибочно: оно не работает должным образом, если вы разрешаете Dockables перемещаться. И enterEvent на самом деле не срабатывает, когда вы входите в другое окно и все еще перетаскиваете QDockWidget. Он срабатывает только после релиза.

Я тоже иду на перерождение (1). QDrag кажется проблематичным, если вы также хотите разрешить переупорядочивание QDockWidget внутри окна.

Я думаю, что правильно было бы сделать это, отреагировав на отпускание / отпускание перетаскиваемого QDockWidget. Но я не могу найти для этого событие или сигнал.

person Gabriel Schreiber    schedule 27.01.2017