Рисование линии в 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();
}

Результат:

Я очень быстро двигался и получал пробелы (теперь моя кнопка мыши нажата)

теперь я отпустил свою кнопку и получил нормальную кривую

Другие вопросы по тегам