Benutzerdefinierte QAction / QMenu für Maustaste Erkennung
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?
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();
}