当前位置: 首页 > 面试题库 >

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

湛同
2023-03-14
问题内容

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


问题答案:

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

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



 类似资料:
  • 日常更新软件,但是更新到 tesseract 的时候,报错了 报错也就算了,这个 tesseract 报错了,下面的其他软件也不更新了,直接 break 了

  • 问题内容: 我在Postgres上使用pg-promise的节点上建立了一个API,效果很好,但是我正在考虑如何修改PUT语句以更好地处理输入中的NULLS。 以下是PUT语句的代码: 现在,此语句有效,但是如果我将NULLS传递给下一个更新,它也会删除现有值。例如,如果我只想更新string1和date2,则必须发送整个json对象,否则所有其他值都将设置为NULL。 有没有更好的方法来解决这个

  • 问题内容: 从CSV读取数据时,它会跳过第二行。我有两个CSV文件,一个用于用户,一个用于属性-密钥ID是user。 我与以下用户一起运行 每个奇数编号都在工作,并且检测到用户已登录,而第二个奇数编号正在跳过。我阅读了一下,但我不认为我有.nextLine()正在像此链接中那样跳过,但是我只在星期五开始使用CSV和BufferedReader! 问题答案: 它跳过第二行,因为您在每次迭代中都读取两

  • 我有一个关于以下两个代码的问题。 没有平行性: 输出为: 具有并行性: 输出为: 为什么并行流的输出不包括1?

  • 可以在没有预定义的光标样式的情况下获得当前的光标类型,就像鼠标通过文本、链接… 大概是这样的: 我想在控制台中记录光标的状态,如:指针、文本、移动、等待... 我在jQuery中找到了某种解决方案,但我想在纯香草JS中找到一个 谢谢你的回答

  • 问题内容: 我正在寻找“ 吸管 ”工具,该工具为CMS提供JavaScript鼠标光标所位于的像素的十六进制值。 对于Firefox,确实有出色的ColorZilla]扩展。但是,它当然只是FF,我真的很想随同CMS一起提供该工具。 荷兰开发人员有一个 非常聪明的主意,即结合使用Ajax和PHP 来找出图像上的Pixel颜色。 但这限制了我可以访问服务器端的图像的范围 ,而我确实梦想着有一个通用工