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

5
我正在开发一个简单的绘画程序。 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个回答

14

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

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


4

你说得对 - 窗口系统并不会为每个像素提供鼠标移动事件。你需要在获取事件的像素之间插值出一条直线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接