2016-12-12 5 views
0

Ich habe solchen Code, um neue Vertex unter Mauszeiger zu zeichnen.Kann kein neues Objekt in QGraphicsScene genau unter dem Mauszeiger zeichnen

void DiaScene::mouseReleaseEvent(QGraphicsSceneMouseEvent * me) 
{ 

qDebug() << Q_FUNC_INFO << me->scenePos(); 
if (this->cursorState == VERTEX) 
{ 
    Vertex * v = new Vertex(1,1); 
    vertexes.append(v); 
    this->addItem(v); 
    qDebug() << me->pos(); 
    v->setPos(me->scenePos()); 
    qDebug() << me->scenePos(); 
} 

} 

Beim Laufen, ich mehrmals an der gleichen Stelle klicken, aber qDebug zeigt verschiedene QPointF und zieht neues Element nicht unter dem Cursor. Ich verstehe, warum ich-> ScenePos() ändert. Warum aber zeichnet die Szene keinen neuen Vertex unter dem Cursor?

Erstens zeichnet es neues Element einige weit vom Cursor. Mit jedem weiteren Klick auf den gleichen Ort wird die Position des neu gezeichneten Gegenstandes näher zum Cursor.

Antwort

1

„Mit jedem weiteren Klick auf der gleichen Stelle die Position des neu drawed Artikel wird näher an Cursor“

Dieses Verhalten bedeutet, dass die Szene nicht eine feste Größe hat und seine SceneRect wächst mit jedem neuen hinzugefügten Artikel. Sie sehen dies, wenn Sie am Ende eines mouseReleaseEvent Handlers eine folgende Zeile qDebug()<<sceneRect(); hinzufügen. Um das Problem zu beheben, setzen Sie einfach die Szene direkt auf die GraphicsView-Rect eines Elternteils:

+0

Das ist es. Vielen Dank. – user3003873

Verwandte Themen