2014-11-27 18 views
6

Ich möchte ToolTips für QMenu Artikel anzeigen lassen (QAction s). Das Beste, was ich erreicht habe, ist das hovered- Signal der QAction zu einer QTooltip Show zu verbinden:QTooltip für QActions in QMenu

connect(action, &QAction::hovered, [=]{ 
    QToolTip::showText(QCursor::pos(), text, this); 
}); 

Das Problem ist, dass manchmal das Programm des Tooltip unter dem Menü positionieren, speziell wenn Menüs ändern.

Gibt es eine Möglichkeit, den Tooltip dazu zu zwingen, oben angezeigt zu werden?

Antwort

5

Du QMenu Unterklasse und Neuimplementierung QMenu::event() das QEvent::ToolTip Ereignis abfangen und QToolTip::showText rufen Sie den Tooltip für die aktive Aktion zu setzen:

#include <QtGui> 

class Menu : public QMenu 
{ 
    Q_OBJECT 
public: 
    Menu(){} 
    bool event (QEvent * e) 
    { 
     const QHelpEvent *helpEvent = static_cast <QHelpEvent *>(e); 
     if (helpEvent->type() == QEvent::ToolTip && activeAction() != 0) 
     { 
       QToolTip::showText(helpEvent->globalPos(), activeAction()->toolTip()); 
     } else 
     { 
       QToolTip::hideText(); 
     } 
     return QMenu::event(e); 
    } 
}; 

Jetzt können Sie Ihr individuelles Menü wie verwenden:

Menu *menu = new Menu(); 
menu->setTitle("Test menu"); 
menuBar()->addMenu(menu); 

QAction *action1 = menu->addAction("First"); 
action1->setToolTip("First action"); 

QAction *action2 = menu->addAction("Second"); 
action2->setToolTip("Second action"); 
+0

Das war genau das, was ich suchte. Vielen Dank. – Noel

6

Seit Qt 5.1 können Sie die Eigenschaft von QMenu verwenden, die standardmäßig auf false festgelegt ist.

Siehe related Qt suggestion.