QMenu中QActions的QTooltip

16

我希望能够为QMenu的选项(QAction)显示工具提示。我所做到的最好的方法是将QAction的悬停信号连接到QTooltip的显示上:

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

问题在于有时程序会将工具提示放置在菜单下面,尤其是在切换菜单时。

是否有办法强制工具提示显示在顶部?

2个回答

30

8

您可以子类化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");

那正是我所寻找的。谢谢。 - Noel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接