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

时间:2009-08-02 20:52:43

标签: c++ linux qt kde

我正在制作一个简单的绘画程序。 似乎Qt(和KDE)将是一种实现它的简单方法。 我发现Qt很容易使用,但现在我遇到了问题。

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

像这样:
alt text
它像一根长绳子一样悬而未决。

当我按下鼠标左键时,我正在使用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个点进行插值?

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:3)

你是对的 - 窗口系统不为每个像素提供鼠标移动事件。您需要在为其获取事件的像素之间插入一条线。