2016-11-03 5 views
0

Я создаю приложение сопоставления на основе графического представления. Все работает отлично, за исключением того, что некоторые линии исчезают при перетаскивании. Кажется, что предмет оценивается с точки зрения, но на самом деле только часть его. Ниже приведены скриншоты.QGraphicsItem исчезает при перетаскивании представления

enter image description here

enter image description here

QGraphicsView Я подклассы и QGraphicsItem, добавляют элементы в сцене, который соединен для просмотра. Чтобы реализовать функцию перетаскивания, я просто использую setDragMode() в конструкторе подкласса.
И в MapShape.cpp:

QRectF Polyline::boundingRect() const 
{ 
    return QRectF(minX-pen.width()/2, minY-pen.width()/2, maxX-minX+pen.width(), maxY-minY+pen.width()); 
} 

void Polyline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    Q_UNUSED(option); 
    Q_UNUSED(widget); 

    pen.setCosmetic(true); 
    painter->setPen(pen); 
    for(auto iter = points.begin(); iter != points.end()-1; ++iter) 
    { 
     painter->drawLine(*iter, *(iter+1)); 
    } 
} 

Может кто-нибудь помочь? Спасибо!

ответ

0

Код не является полным, чтобы быть уверенным, но наиболее вероятная причина в том, что результат boundingRect либо неверен, либо вы не вызывали prepareGeometryChange перед изменением членов minX, minY и т. Д. или ширину пера. Если вы случайно выходите за пределы boundingRect и включаете флаг ItemClipsToShape, вы также можете увидеть поведение, подобное этому. Без ItemClipsToShape ваша картина все равно будет успешной, но вы получите артефакты при перемещении элементов. С помощью ItemClipsToShape художник просто не выйдет за пределы.

+0

Спасибо, что напомнили мне об ограничении. Я просто ошибочно вычисляю границы, и теперь проблема решена :) –

Смежные вопросы