Rechtsklick-Menü im QGraphicsView

Verschiedenes zu Qt
Antworten
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Rechtsklick-Menü im QGraphicsView

Beitrag von huckleberry »

Hallo,

kennt ihr das ElasticNodes Beispiel?
C:\Qt\5.2.1\mingw48_32\examples\widgets\graphicsview\elasticnodes

Das ist eine QGraphicsView in welche dann Knoten und Kanten eingerendert werden. Ich würde gerne ein Recht-Klick-Menü einbauen. Also ein Menü direkt am entsprechenden Knoten was eingeblendet, wenn ich auf diesen rechtklicke.

Code: Alles auswählen

// .h
void mousePressEvent(QGraphicsSceneMouseEvent* event);

// .cpp
void GraphWidget::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
    if( event->button() == Qt::RightButton )
    {
        QMenu* myMenu = new QMenu();
        myMenu->addAction(“a Menu”, this, SLOT(addNode()) );
        myMenu->popup( QCursor::pos() );
    }
}
Und addNode() wäre mein Slot um neue Slots hinzuzufügen... Irgendwie ist der Wurm drin, ich shee nichts.

Wäre es mit QGraphicsSceneContextMenuEvent eleganter? Habs noch nie benutzt...
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: Rechtsklick-Menü im QGraphicsView

Beitrag von huckleberry »

Leider ist bei dem Beispiel bei mir auch nichts zu sehen..

Code: Alles auswählen

void MyItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    QMenu menu;
    menu.addAction("Action 1");
    menu.addAction("Action 2");
    QAction *a = menu.exec(event->screenPos());
    qDebug("User clicked %s", qPrintable(a->text()));
}
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: Rechtsklick-Menü im QGraphicsView

Beitrag von huckleberry »

Das mit den Menüs habe ich nun im GraphWidget hinbekommen.

Code: Alles auswählen

void GraphWidget::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu menu(this);
    menu.addAction("Add Fact");
    menu.addAction("Add Line");
    menu.addAction("Do else");
    QAction *a = menu.exec(event->globalPos());

    // addNode() oder addEdge()
}

void GraphWidget::addNode(QAction * t_ac)
{
    //
}

void GraphWidget::addEdge(QAction * t_ac)
{
    //
}
Je nachdem welches im oben erwähnten Beispiel Menü Add Node oder Add Edge ich auswähle, würde ich nun gerne addNode() oder addEdge() aufrufen.. Ich hätte jetzt für jedes Menüitem ein QAction erstellt und diese dann nach exec() verglichen? Das geht doch bestimmt eleganter?
Antworten