Seite 1 von 1

QGraphicsEllipseItem auf QGraphicsScene verschieben

Verfasst: 4. Juli 2012 12:02
von Tuxing
Hallo zusammen.

Ich möchte per Mausklick auf einer QGraphicsScene ein QGraphicsEllipseItem einfügen. Mit dem Klick soll das Item erscheinen, solange die Maustaste gedrückt wird soll das Item verschiebbar sein und wenn die Maustaste losgelassen wird, bleibt das Item an der Position. Ich habe eine eigene Klasse GraphicsScene erstellt ung von QGraphicsScene geerbt um die Mouseevents überschreiben zu können:

Code: Alles auswählen

void G20_GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    if( event->button() == Qt::LeftButton )
    {
                QColor c_red_(Qt::red);
                QBrush brush_(c_red_);
                QPen pen_(c_red_);

                m_ellipse = this->addEllipse(event->scenePos().x(),event->scenePos().y(),10,10,pen_,brush_);
     }
}


void G20_GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    if( m_ellipse != 0 )
    {
        m_ellipse->setPos(event->scenePos().x(), event->scenePos().y());
    }
    else
    {
        QGraphicsScene::mouseMoveEvent(event);
    }
}


void G20_GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    m_ellipse = 0;
    QGraphicsScene::mouseReleaseEvent(event);
}
Das funktioniert auch soweit ganz gut. Bei einem Klick ohne Bewegung erscheint das Item an der Position. Sobald ich aber das Item bewege, befindet es sich plötzlich viel weiter rechts bzw. viel weiter unten als der Mauszeiger. Ich kann es dann auch ganz normal bewegen, aber es ist einfach nicht unter dem Mauszeiger, wo es laut meiner "mouseMoveEvent"-Funktion eigentlich sein sollte.

Kann mir jemand erklären wo dieser Offset her kommt ?

Danke schonmal

Re: QGraphicsEllipseItem auf QGraphicsScene verschieben

Verfasst: 4. Juli 2012 13:12
von Tuxing
hm ok ich habs jetzt einfach so gemacht dass ich das objekt immer wieder lösche und neu erstelle. Funktioniert auch prima. Allerdings wüsste ich dennoch gerne warum das verschieben wie oben beschrieben nicht funktioniert.