使用Qt在QGraphicsScene中绘制线条

时间:2014-09-16 15:52:32

标签: qt qgraphicsscene mousepress

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

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();
}

以下是截图:

enter image description here

左手绘制得更慢,更快。

1 个答案:

答案 0 :(得分:3)

所以这是一个非常有趣的问题。我在我的电脑上做同样的事情并得到同样的问题。我没有深入阅读你的代码,因为它似乎是你的QGraphicsView的子类,但我是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();
}

结果:

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

enter image description here

现在我释放了我的按钮并获得正常的曲线

enter image description here