Forum: PC-Programmierung QT4 Event "MouseButtonRelease" verschicken?


von Stephan (Gast)


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

von Brun .. (brun)


Lesenswert?

Ich glaub hier kann dir eher geholfen werden.

http://www.qtforum.de/forum/

von Stephan (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.