我目前正在开发图像查看器应用程序。在这个应用程序中,我有一个所谓的“平移缩放”功能。这意味着,当按住某个鼠标按钮时,用户可以通过前后平移来缩放图像。
它工作正常,但随着使用该功能,鼠标(自然)在屏幕上上下移动,并在某个点到达屏幕边界,这将使其停止。相反,我想要一种鼠标保持静止并且只有图像放大率发生变化的行为。
我试图通过调用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
?