QMenu 中用于 QActions 的 QTooltip
Posted
技术标签:
【中文标题】QMenu 中用于 QActions 的 QTooltip【英文标题】:QTooltip for QActions in QMenu 【发布时间】:2014-11-27 00:18:14 【问题描述】:我希望能够显示 QMenu
项目 (QAction
s) 的工具提示。我取得的最好成绩是将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 的可访问名称