Frage

Ich versuche, ein Popup-Menü zu erstellen, wo ich die Maustaste erkennen kann, die für ein bestimmtes Element gedrückt wurden. Ich habe eine benutzerdefinierte QAction erstellt bereits mein QMenu zu bauen, aber das triggered Signal, wenn der Menüpunkt gedrückt wird, stellt keinen QMouseEvent für mich die Taste gedrückt abzufragen.

Auch ich habe die Einrichtung die eine Status Spitze für jede QAction, die in der Statusleiste angezeigt wird, wenn ich die Maus über sie, aber es bleibt auch nachdem ich das QMenu schließen. Ist das ein normales Verhalten?

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob ich verstanden, was Sie wünschen; aber wenn Sie ein Popup-Menü auf dem rechten Maustaste angezeigt werden sollen, sollten Sie zunächst in Header-Datei Ihrer Widgets (oder Fensterklasse) Überbrückungsfunktion auf Mausereignis im Zusammenhang und erklären, eine Funktion, die Ihr Popup-Menü angezeigt. So sollte die Header-Datei diese Erklärungen enthalten:

...
void Popup(const QPoint& pt);
void mousePressEvent(QMouseEvent *event);
...

Und in CPP-Datei Definitionen von Funktionen:

void testQt::mousePressEvent(QMouseEvent *event)
{
     if (event->button() == Qt::RightButton) {

         this ->Popup(event ->pos());
         event->accept();
     }
 }

void testQt::Popup(const QPoint& pt)
{
    QPoint global = this ->mapToGlobal(pt);
    QMenu* pPopup = new QMenu(this);

    QAction* pAction1 = new QAction("Item 1", this);
    QAction* pAction2 = new QAction("Item 2", this);
    pPopup ->addAction(pAction1);
    pPopup ->addAction(pAction2);

    QAction* pItem = pPopup ->exec(global);

    if(pItem == pAction1)
    {
    }
    else if(pItem == pAction2)
    {
    }
}

Nun, wenn Sie mit der rechten Maustaste drücken, wird ein Popup-Menü an der Cursorposition angezeigt. Ich hoffe, das hilft.

Hinweis: Wenn Sie ermitteln möchten, welche Maustasten gedrückt wird, wenn eine Aktion gewählt wird, sollten Sie Ihre eigene Klasse von QMenu erben. QMenu Klasse enthält geschützte Funktion mousePressEvent(QMouseEvent *event) welche sollte sein überschriebenen und Sie werden in der Lage sein, zu erkennen, ob links oder rechte Maustaste gedrückt wird, wenn ein Element in Ihrem Menü gewählt wird.

Andere Tipps

Ich weiß, das ist eine sehr alte Post. Aber wenn Sie wollen wissen, was Tasten Sie in einem Popup-Menü / Kontextmenü angeklickt haben. Lassen Sie uns sagen Sie Taste Speichern drücken, die mit Signalen und Slots usw. In dem Schlitz Aufruf eine Methode namens sender(); verbunden ist. Dies gibt eine QObject, die Sie in Ihren QAction* werfen können und bekommen die Daten usw. von ihm.

void MyClass::showMenu()
{
     auto action(new QAction*("Blah", ui->my_toolbar));

     QObject::connect(action, &QAction::triggered, this, &MyClass::mySlot);
}

void MyClass::mySlot()
{
     auto myAction(static_cast<QAction*>(sender()));
     myAction->doAwesomeStuff();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top