QTenu中QActions的QTooltip

时间:2014-11-27 00:18:15

标签: c++ qt tooltip qmenu qaction

我希望能够显示QMenu项(QAction s)的工具提示。我取得的最好成绩是将QAction的悬停信号连接到QTooltip节目:

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

问题在于,有时程序会将工具提示放在菜单下方,特别是在更改菜单时。

有没有办法强制显示工具提示?

2 个答案:

答案 0 :(得分:15)

自Qt 5.1起,您可以使用QMenu的属性toolTipsVisible,默认设置为false

请参阅related Qt suggestion

答案 1 :(得分:6)

您可以继承QMenu并重新实现QMenu::event()来拦截QEvent::ToolTip事件并致电QToolTip::showText为活动操作设置工具提示:

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

现在您可以使用自定义菜单,如:

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");