【问题标题】:Qt, Mouse skipping, not updating every pixel, mouseMoveEvent()Qt,鼠标跳过,不更新每个像素,mouseMoveEvent()
【发布时间】:2010-11-16 05:32:06
【问题描述】:

我正在开发一个简单的绘图程序。 似乎 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 个点进行插值吗?

【问题讨论】:

    标签: c++ linux qt kde


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多