QMenu 中用于 QActions 的 QTooltip

Posted

技术标签:

【中文标题】QMenu 中用于 QActions 的 QTooltip【英文标题】:QTooltip for QActions in QMenu 【发布时间】:2014-11-27 00:18:14 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

从 Qt 5.1 开始,您可以使用 QMenu 的属性toolTipsVisible,默认设置为false

请参阅related Qt suggestion。

【讨论】:

【参考方案2】:

您可以继承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");

【讨论】:

这正是我想要的。谢谢。

以上是关于QMenu 中用于 QActions 的 QTooltip的主要内容,如果未能解决你的问题,请参考以下文章

为啥 QToolTips 不会出现在 QMenu 中的 QActions 上

如何设置 QMenu 中包含的 QActions 的可访问名称

为禁用的 QToolButton 启用 QMenu 访问

如何将 QMenu 中的 QAction 转换为 QWidget?

防止 QMenu 在其 QAction 之一被触发时关闭

如何在 QMenu 中隐藏子菜单