QT4 Event "MouseButtonRelease" verschicken?

Gast #1804434
Lesenswert?

Morgen

ich hoffe ihr könnt mir helfen.
Folgende Situatuion:

Ich habe mir das Beispiel "DiagramScene" mal nächer angesehen und möchte 
es etwas ändern.

Beschreibung: Auf einer "QGraphicsScene" werden verschiedene 
"QGraphicsPolygonItem" erstellt, die man mit der Maus bewegen kann.

Änderung:
Ich möchte nun im "MouseMoveEvent" der "QGraphicsPolygonItem" prüfen ob 
eine Kollision stattgefunden hat und darauf reagieren. Wenn die 
Kollision da ist, möchte ich das das Objekt an der Maus, an eine Pos 
setzen und es soll vom MouseCoursor verschwinden. Das Versetzen klapp, 
aber ich bekomme das Objekt nicht von der Mouse, was kann ich tun???

Was ich mir vorgestellt hatte war das ich mal ebend ein 
"MouseReleaseEvent" an die Scene verschicke und gut ist. ABER scheinbar 
empfängt die Scene nicht mein Event und es wird nicht ausgeführt.
1
void DiagramItem::mouseMoveEvent( QGraphicsSceneMouseEvent * event )
2
{
3
    // erst das Move ausführen
4
    QGraphicsPolygonItem::mouseMoveEvent( event);
5

6
    // und prüfen
7
    QList<QGraphicsItem *> list = collidingItems(); //
8
    if(list.count() > 0)
9
    {
10
     // Kollision ist da
11
     moveBy(10, 10);
12
     if (MyEvent != NULL)
13
     {
14
          delete MyEvent;
15
          MyEvent= NULL;
16
     }
17
     MyEvent= new QMouseEvent(QEvent::MouseButtonRelease, this->pos().toPoint(), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
18
     QApplication::sendEvent(this->scene(), MyEvent);
19
     }
20
}

PS: Wenn ich ein "GraphicsSceneMouseRelease" senden möchte, stürzt das 
Programm ab!

Ich habe auch schon dies getestet:
1
bool QGraphicsScene::sendEvent ( QGraphicsItem * item, QEvent * event )
aber ohne Erfolg.

mfg
Stephan
Gast #1805634
Lesenswert?

Hi

habs gelöst:
1
void DiagramItem::mouseMoveEvent( QGraphicsSceneMouseEvent * event )
2
{
3
    QGraphicsPolygonItem::mouseMoveEvent( event);
4

5
    QList<QGraphicsItem *> list = collidingItems(); //
6
    if(list.count() > 0)
7
    {
8
        QGraphicsSceneMouseEvent MyEvent(QEvent::GraphicsSceneMouseRelease);
9

10
        MyEvent.setButton(Qt::LeftButton);
11
        MyEvent.setButtons(Qt::NoButton);
12
        MyEvent.setScenePos(event->screenPos());
13
        MyEvent.setScenePos(event->scenePos());
14
        MyEvent.setModifiers(Qt::NoModifier);
15
        MyEvent.setButtonDownPos(Qt::LeftButton, event->pos());
16
        MyEvent.setButtonDownScenePos(Qt::LeftButton, event->scenePos());
17
        MyEvent.setButtonDownScreenPos(Qt::LeftButton, event->screenPos());
18

19
        QApplication::sendEvent(this->scene(), &MyEvent);
20
    }
21
}

mfg
Stephan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren