标签: qcursor

如何使用 Qt 防止 QCursor::setPos() 上的 mouseMoveEvent?

我目前正在开发图像查看器应用程序。在此应用程序中,我有一个所谓的“平移缩放”功能。这意味着,当按住某个鼠标按钮时,用户可以通过前后平移来缩放图像。

它工作正常,但随着该功能的使用,鼠标(自然地)在屏幕上上下移动,并在某个时刻到达屏幕边框,这将使其停止。相反,我想要一种鼠标保持静止并且仅图像放大倍数发生变化的行为。

我尝试通过调用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

c++ qt mouse-position qcursor

5
推荐指数
1
解决办法
3331
查看次数

标签 统计

c++ ×1

mouse-position ×1

qcursor ×1

qt ×1