2014-09-16 2 views
3

У меня проблема с рисованием линий. Он работает хорошо, когда мышь перемещается медленно, но когда мышь перемещается быстрее, есть некоторые пробелы, и я не знаю, почему. Это код:Линия рисования в 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(); 
} 

Вот скриншот:

enter image description here

левые нарисовали медленнее, да быстрее.

ответ

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

+0

Спасибо большое :) –