我希望能够显示QMenu项目的工具提示(QActions).我所取得的最好成绩是将QAction的悬停信号连接到QTooltip节目:
connect(action,&QAction::hovered,[=]{
QToolTip::showtext(QCursor::pos(),text,this);
});
问题是有时程序会将工具提示定位在菜单下方,特别是在更改菜单时.
有没有办法强制工具提示显示在顶部?
解决方法
您可以继承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");