我正在研究一个简单的绘画程序。看来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)反复显示鼠标的移动,但是经常会跳过像素。
您需要跟踪最后一个像素位置,并绘制一条线,或者在最后位置和当前位置之间添加额外的点。