виджет

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

Я погорячился, когда увиделunderMouse в документах, но он не работает во время событий перетаскивания (когда я тестировал, казалось, он возвращает неправильные значения). В противном случае моей целью было найти прямоугольник, содержащий целевой виджет, и выяснить, содержит ли он координаты мыши при наведении курсора вверх. Я не могу просто использоватьcontentsRect, поскольку он возвращает позиции относительно виджета, к которому он вызывается. я думал такmapToGlobal дал бы мне абсолютные значения пикселей экрана, но он также продолжает давать сбой. Я попытался вызвать mapTo в окне родительского виджета, но это также, похоже, не удалось.

Ниже приведен код, показывающий различные QRects и QPoints, которые я получил с помощью различных методов. Может быть, с одним из них произошла простая ошибка, поэтому я предоставил их все.

QRect relativeWidgetRect = targetWidget->contentsRect();
QRect *absoluteWidgetRect = new QRect(QWidget::mapToGlobal(relativeWidgetRect.topLeft()), QWidget::mapToGlobal(relativeWidgetRect.bottomRight()));
QRect *widgetRect = new QRect(mapTo(window(), relativeWidgetRect.topLeft()), mapTo(window(), relativeWidgetRect.bottomRight()));
QPoint relativeMousePos = QCursor::pos();
QPoint absoluteMousePos = QWidget::mapToGlobal(relativeMousePos);
QPoint widgetMousePos = mapTo(window(), relativeMousePos);

mapToParent не будет работать для моих целей, так как целевой виджет на самом деле является потомком родителя верхнего уровня.

Обновить Вот код, который в итоге получился. В моем виджете верхнего уровня (который был предком как исходного, так и целевого виджетов), я добавил это:

QRect widgetRect = targetWidget->Geometry();
QPoint mousePos = targetWidget->mapFromGlobal(QCursor::pos());
if(widgetRect.contains(mousePos))
{
// Logic
}

Ответы на вопрос(3)

Ваш ответ на вопрос