我有画线的问题。当鼠标移动缓慢时效果很好,但是当鼠标移动得更快时,会有一些空白,我不知道为什么。这是代码:
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();
}
以下是截图:
左手绘制得更慢,更快。
答案 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();
}
结果:
我移动速度非常快并且出现间隙(现在我的鼠标按钮被按下了)
现在我释放了我的按钮并获得正常的曲线