2016-06-01 9 views
1

Ich habe eine QGraphicsView in meinem MainWindow und ich habe eine benutzerdefinierte "Grab" -Funktion auf meiner Leinwand (das ist die QGraphicsView in meinem MainWindow) aufgerufen, wenn ich beide Maustasten drücken.Kontextmenü auf benutzerdefinierte Verknüpfung

Also ich möchte mein Kontextmenü nur aktivieren, wenn ich STRG + Rechtsklick drücke und die Aktivierung nur mit einem Rechtsklick verhindere. Es wäre wichtig, die Richtlinie ActionsContextMenu beizubehalten.

Gibt es eine Möglichkeit, das zu tun?

+0

Klingt wie Sie sollten das Mausereignis der Zeichenfläche Unterklasse, um dies zu tun. –

Antwort

1

Überprüfen Sie einfach für KeyboardModifier. Sie können angeben, welcher Modifikator Sie haben möchten. In Ihrem Fall ist es die ControlModifier. Dann überschreiben die Methode mousePressEvent():

void yourClass::mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button() == Qt::RightButton && 
     event->modifiers() == Qt::ControlModifier) 
    { 
     // call your context menu 
    } 
} 

Wenn Sie diese verwenden möchten, dann müssen Sie ein QMenu nennen. Fügen Sie einfach diese Funktion in Ihrer Klasse hinzu:

void yourClass::showMenu() 
{ 
    QMenu contextMenu(this); 

    QAction action("My Action", this); 
    contextMenu.addAction(&action); 

    contextMenu.exec(); 
} 
+0

Aber wie kann ich mein Kontextmenü aufrufen? Für mich ist es jetzt automatisch, ich habe nur Aktionen hinzugefügt. –

+0

Was meinst du es ist automatisch? Zeigen Sie Ihren Code mit dem Menü dann – IAmInPLS

+0

Ich habe keinen Code für das Menü. Ich habe ContextMenuPolicy in ActionsContextMenu in PropertyEditor geändert und eine Action in ActionEdior hinzugefügt. Und jetzt, wenn ich rechts klicke, habe ich ein Kontextmenü. –

Verwandte Themen