В настоящее время я разрабатываю приложение для просмотра изображений. В этом приложении у меня есть так называемая функция панорамирования. Это означает, что, удерживая определенную кнопку мыши, пользователь может масштабировать изображение путем панорамирования вперед и назад.C++/Qt: предотвратить `mouseMoveEvent` на` QCursor :: setPos() `
Он отлично работает, но при использовании функции мышь (естественно) перемещается вверх и вниз по экрану и в какой-то момент достигнет границ экрана, что заставит ее остановиться. Вместо этого мне хотелось бы, чтобы мышь оставалась неподвижной и менялось только увеличение изображения.
Я попытался достичь этого, вызвав QCursor::setPos
внутри QWidget::mouseMoveEvent
и сбросив мышь в исходное положение после того, как обработал ход. Он работает так далеко, что мышь остается почти неподвижной (она вибрирует вперед и назад). Однако это приведет к тому, что событие перемещения мыши будет вызываться снова, фактически аннулируя только что сделанную настройку. Это приведет к «зависанию» эффекта. Каждая корректировка будет немедленно отменена.
Вот код пропущен, так что вы получите представление о том, что я делаю:
void ImageView::mouseMoveEvent(QMouseEvent *e) {
//some code
if (_panZooming) {
//some code here
//doesn't work as expected because it invokes this event again
QCursor::setPos(mapToGlobal(_initialMousePosition.toPoint()));
}
}
Есть ли способ, чтобы предотвратить событие перемещения мыши произойти при использовании QCursor::setPos
?
'QCursor :: setPos()' вызовет 'mouseMoveEvent()', причины. Возможно, вы хотите проверить, доходит ли курсор до границы экрана, например, если курсор находится на верхней границе экрана, продолжайте увеличивать/уменьшать масштаб независимо от того, движется курсор или нет. – helsinki
Но как мне получить дельта тогда? Дельта вычисляется разностью координаты y мыши в исходном положении до положения, которое оно в настоящее время находится.Если пользователь продолжает двигаться вверх, но мышь больше не перемещается, потому что она находится на краю экрана, то в y-координате больше не будет никакой разницы. – user1488118
вы можете получить позицию курсора desktopwidget и скрыть фактический курсор для лучшего удобства пользователя и сбросить мышь в положение мыши. –