我希望能够显示QMenu
项(QAction
s)的工具提示。我取得的最好成绩是将QAction
的悬停信号连接到QTooltip
节目:
connect(action, &QAction::hovered, [=]{
QToolTip::showText(QCursor::pos(), text, this);
});
问题在于,有时程序会将工具提示放在菜单下方,特别是在更改菜单时。
有没有办法强制显示工具提示?
答案 0 :(得分:15)
自Qt 5.1起,您可以使用QMenu的属性toolTipsVisible
,默认设置为false
。
答案 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");