mikrocontroller.net

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


Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
void DiagramItem::mouseMoveEvent( QGraphicsSceneMouseEvent * event )
{
    // erst das Move ausführen
    QGraphicsPolygonItem::mouseMoveEvent( event);

    // und prüfen
    QList<QGraphicsItem *> list = collidingItems(); //
    if(list.count() > 0)
    {
     // Kollision ist da
     moveBy(10, 10);
     if (MyEvent != NULL)
     {
          delete MyEvent;
          MyEvent= NULL;
     }
     MyEvent= new QMouseEvent(QEvent::MouseButtonRelease, this->pos().toPoint(), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
     QApplication::sendEvent(this->scene(), MyEvent);
     }
}

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

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

mfg
Stephan

Autor: Brun ... (brun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub hier kann dir eher geholfen werden.

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

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

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

        MyEvent.setButton(Qt::LeftButton);
        MyEvent.setButtons(Qt::NoButton);
        MyEvent.setScenePos(event->screenPos());
        MyEvent.setScenePos(event->scenePos());
        MyEvent.setModifiers(Qt::NoModifier);
        MyEvent.setButtonDownPos(Qt::LeftButton, event->pos());
        MyEvent.setButtonDownScenePos(Qt::LeftButton, event->scenePos());
        MyEvent.setButtonDownScreenPos(Qt::LeftButton, event->screenPos());

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

mfg
Stephan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.