一尘不染

Qt,鼠标跳过,不更新每个像素,mouseMoveEvent()

linux

我正在研究一个简单的绘画程序。看来Qt(和KDE)是实现它的一种简便方法。我发现使用Qt非常容易,但是现在遇到了问题。

当我在程序中绘制某些内容时,如果我将鼠标快速移动,则鼠标会跳过。

像这样:
替代文字
它应该像一个长字符串。

当按下鼠标左键时,我正在使用mouseMoveEvent()向图像绘制像素。我叫setMouseTracking(true);
因此只要我移动鼠标就应该调用该事件。

void camoMaker::mouseMoveEvent(QMouseEvent *ev)
{
    if(ev->state()==Qt::LeftButton)
    {
        QPoint mPoint=ev->pos();
        mPoint.setX(mPoint.x()-80);
        drawPoint(mPoint);
    }
}

camoMaker是主要的小部件。
drawPoint()既在内部QImage上绘制像素,又在QWidget上使用QPainter绘制绘图区域。

在我看来,不是鼠标移动的每个像素都调用mouseMoveEvent(),或者鼠标实际上只是跳过了一些像素。

我了解这可能只是它的工作方式,而不是Qt错误,而是X11或操作系统如何处理鼠标位置/输入。

如果是这样,我将如何解决它,我应该尝试从已注册的2个点进行插值吗?


阅读 518

收藏
2020-06-03

共1个答案

一尘不染

在大多数操作系统上,鼠标移动不会针对每个像素发生鼠标事件。消息处理程序(包括KDE / linux)反复显示鼠标的移动,但是经常会跳过像素。

您需要跟踪最后一个像素位置,并绘制一条线,或者在最后位置和当前位置之间添加额外的点。

2020-06-03