5

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

4

2 回答 2

14

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

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

于 2009-08-02T20:55:34.660 回答
4

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

于 2009-08-02T20:56:13.707 回答