4

我画线有问题。当鼠标移动缓慢时效果很好,但是当鼠标移动得更快时,会有一些间隙,我不知道为什么。这是代码:

if(QEvent::MouseButtonPress&&event->buttons()==Qt::LeftButton){
QPointF pt=mapToScene(event->pos());
        band->setGeometry(0,0,0,0);
         band->hide();
        band->update();
         this->scene()->addLine(pt.x(),pt.y(),pt.x(),pt.y(),QPen(color, size));
    qDebug()<<event->pos();
}

这是一个屏幕截图:

在此处输入图像描述

左边画得慢,右边画得快。

4

1 回答 1

5

所以这是一个非常有趣的问题。我在我的电脑上做同样的事情并得到同样的问题。我没有深入阅读您的代码,因为您似乎是 subclass QGraphicsView,但我 subclass QGraphicsScene,但没关系。我告诉你主要的想法。接下来我可以为您提供:

按原样绘制,但当用户结束绘制时,您将其删除并绘制 1 条非常漂亮的曲线,没有此间隙。你应该使用mouseReleaseEvent

mouseMoveEvent

    QPoint pos = mouseEvent->scenePos().toPoint();//just get point
    pol.append(pos);//append to polygon
//...draw lines or what you want

在构造函数中:

QPolygon pol;

mouseReleaseEvent您创建QPainterPath时,将其加载到多边形并绘制没有间隙的法线。

void GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    QPainterPath myPath;
    myPath.addPolygon(pol);
    addPath(myPath,QPen(Qt::red,2));
    pol.clear();
}

结果:

我移动得非常快并且有间隙(现在我的鼠标按钮被按下了)

在此处输入图像描述

现在我松开按钮并获得正常曲线

在此处输入图像描述

于 2014-09-16T17:11:53.497 回答