Как я могу перетащить весь безрамочный QWidget, щелкнув и перетащив элемент внутри QWebView?

В настоящее время у меня есть QWidget, который содержит QWebView. Контейнер QWidget полупрозрачный и безрамочный. Мне удалось сделать возможным перетаскивание безрамочного окна, щелкая и перетаскивая за пределами QWidget, но я не могу перетаскивать, когда щелкаю что-либо в QWebView.

Моя цель — создать элемент в DOM QWebView с классом или идентификатором «drag-handle». Затем внутри приложения я хотел бы найти любой элемент с именем «drag-handle» и привязать его к событию перетаскивания, чтобы я мог использовать его для перетаскивания всего контейнера QWidget.

Я надеюсь, что это имеет смысл, не стесняйтесь просто указать мне направление некоторых документов или образцов материала, если вы думаете, что это поможет мне, я был бы более чем счастлив попытаться понять это самостоятельно, если кто-то может просто указать мне правильное направление.


person JeremyS    schedule 08.11.2012    source источник


Ответы (1)


По моему мнению, вы должны использовать не события перетаскивания, а события мыши. Вы должны расширить класс QWebVew, переопределить события обработчика мыши и:

  • Когда будет обработано событие нажатия мыши над вашим объектом «drag-handle», вы можете установить курсор Qt::ClosedHandCursor.
  • После того, как событие перемещения мыши будет обработано, вы должны вычислить смещение движения мыши и переместить главное окно соответственно на рассчитанное смещение. Что-то вроде этого:

Смещение QPoint = предыдущее положение — событие-> положение (); mainWindow->move(mainWindow->pos() + смещение);

  • Когда событие отпускания мыши будет обработано, вы можете сбросить курсор мыши.

Для реализации этой функциональности вы можете использовать QStateMachine.

person nomenas    schedule 08.11.2012
comment
Спасибо за ответ. Мой текущий метод перетаскивания безрамочного QWidget использует этот метод вычисления смещения... Чего я не совсем понимаю, так это того, как добраться до элемента дескриптора перетаскивания из кода Qt, чтобы я мог обрабатывать событие нажатия мыши. - person JeremyS; 20.11.2012