Рисование линии в QGraphicsScene с помощью Qt
У меня проблема с рисованием линий. Это работает хорошо, когда мышь движется медленно, но когда мышь движется быстрее, есть некоторые пробелы, и я понятия не имею, почему. Это код:
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();
}
Вот скриншот:
Слева рисуется медленнее, справа быстрее.
1 ответ
Так что это действительно интересный вопрос. Я делаю то же самое на своем компьютере и получаю ту же проблему. Я не читаю глубоко ваш код, потому что кажется, что вы подкласс 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();
}
Результат:
Я очень быстро двигался и получал пробелы (теперь моя кнопка мыши нажата)
теперь я отпустил свою кнопку и получил нормальную кривую