2014-11-27 21 views
6

Chcę móc wyświetlać etykiety narzędzi dla elementów QMenu (QAction s). Najlepszą udało mi się osiągnąć to, aby podłączyć sygnał oscylował w QAction do QTooltip koncert:QTooltip dla QActions w QMenu

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

Problem polega na tym, że czasami program umieści podpowiedź poniżej menu, szczególnie przy zmianie menu.

Czy istnieje sposób na wymuszenie wyświetlania podpowiedzi u góry?

Odpowiedz

5

Można podklasy QMenu i reimplementing QMenu::event() przechwycić zdarzenie QEvent::ToolTip i nazywają QToolTip::showText ustawić podpowiedź dla aktywnego działania:

#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); 
    } 
}; 

Teraz można korzystać z menu niestandardowe jak:

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

To było dokładnie to, czego szukałem. Dzięki. – Noel