我目前正在开发图像查看器应用程序。在此应用程序中,我有一个所谓的“平移缩放”功能。这意味着,当按住某个鼠标按钮时,用户可以通过前后平移来缩放图像。
它工作正常,但随着该功能的使用,鼠标(自然地)在屏幕上上下移动,并在某个时刻到达屏幕边框,这将使其停止。相反,我想要一种鼠标保持静止并且仅图像放大倍数发生变化的行为。
我尝试通过调用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()));
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法防止使用时发生鼠标移动事件QCursor::setPos?