Я хочу показать подсказки для QMenu
Предметы (QAction
с). Лучшее, чего я достиг, — это подключить сигнал 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");
Начиная с Qt 5.1, вы можете использовать свойство QMenu toolTipsVisible
, который по умолчанию установлен в false
,
Увидеть связанное предложение Qt.