gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:47:46 27 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c++ - Qt,鼠标跳过,不更新每个像素,mouseMoveEvent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com