QTooltip для QActions в QMenu

Я хочу показать подсказки для QMenu Предметы (QActionс). Лучшее, чего я достиг, — это подключить сигнал QAction к QTooltip шоу:

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

Проблема в том, что иногда программа помещает всплывающую подсказку под меню, особенно при смене меню.

Есть ли способ заставить всплывающую подсказку показываться сверху?

7

Решение

Вы можете подкласс 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");
5

Другие решения

Начиная с Qt 5.1, вы можете использовать свойство QMenu toolTipsVisible, который по умолчанию установлен в false,

Увидеть связанное предложение Qt.

10

По вопросам рекламы [email protected]