diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 922a38b324..12b926e6de 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -67,6 +67,7 @@ #include "qwidgetaction.h" #include "qtoolbutton.h" #include "qpushbutton.h" +#include "qtooltip.h" #include #include #include @@ -2368,6 +2369,19 @@ QMenu::event(QEvent *e) if (d->currentAction) d->popupAction(d->currentAction, 0, false); break; +#ifndef QT_NO_TOOLTIP + case QEvent::ToolTip: + if (d->toolTipsVisible) { + const QHelpEvent *ev = static_cast(e); + if (const QAction *action = actionAt(ev->pos())) { + const QString toolTip = action->d_func()->tooltip; + if (!toolTip.isEmpty()) + QToolTip::showText(ev->globalPos(), toolTip, this); + return true; + } + } + break; +#endif // QT_NO_TOOLTIP #ifndef QT_NO_WHATSTHIS case QEvent::QueryWhatsThis: e->setAccepted(d->whatsThis.size()); @@ -3089,6 +3103,32 @@ void QMenu::setSeparatorsCollapsible(bool collapse) d->platformMenu->syncSeparatorsCollapsible(collapse); } +/*! + \property QMenu::toolTipsVisible + \since 5.1 + + \brief whether tooltips of menu actions should be visible + + This property specifies whether action menu entries show + their tooltip. + + By default, this property is false. +*/ +bool QMenu::toolTipsVisible() const +{ + Q_D(const QMenu); + return d->toolTipsVisible; +} + +void QMenu::setToolTipsVisible(bool visible) +{ + Q_D(QMenu); + if (d->toolTipsVisible == visible) + return; + + d->toolTipsVisible = visible; +} + QT_END_NAMESPACE // for private slots diff --git a/src/widgets/widgets/qmenu.h b/src/widgets/widgets/qmenu.h index 3f6661951d..7547c69a10 100644 --- a/src/widgets/widgets/qmenu.h +++ b/src/widgets/widgets/qmenu.h @@ -70,6 +70,7 @@ private: Q_PROPERTY(QString title READ title WRITE setTitle) Q_PROPERTY(QIcon icon READ icon WRITE setIcon) Q_PROPERTY(bool separatorsCollapsible READ separatorsCollapsible WRITE setSeparatorsCollapsible) + Q_PROPERTY(bool toolTipsVisible READ toolTipsVisible WRITE setToolTipsVisible) public: explicit QMenu(QWidget *parent = 0); @@ -139,6 +140,9 @@ public: bool separatorsCollapsible() const; void setSeparatorsCollapsible(bool collapse); + bool toolTipsVisible() const; + void setToolTipsVisible(bool visible); + Q_SIGNALS: void aboutToShow(); void aboutToHide(); diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h index 0b8137cff3..27b4745951 100644 --- a/src/widgets/widgets/qmenu_p.h +++ b/src/widgets/widgets/qmenu_p.h @@ -84,7 +84,8 @@ class QMenuPrivate : public QWidgetPrivate Q_DECLARE_PUBLIC(QMenu) public: QMenuPrivate() : itemsDirty(0), maxIconWidth(0), tabWidth(0), ncols(0), - collapsibleSeparators(true), activationRecursionGuard(false), hasHadMouse(0), aboutToHide(0), motions(0), + collapsibleSeparators(true), toolTipsVisible(false), + activationRecursionGuard(false), hasHadMouse(0), aboutToHide(0), motions(0), currentAction(0), #ifdef QT_KEYPAD_NAVIGATION selectAction(0), @@ -123,6 +124,7 @@ public: QRect popupGeometry(int screen = -1) const; mutable uint ncols : 4; //4 bits is probably plenty uint collapsibleSeparators : 1; + uint toolTipsVisible : 1; QSize adjustMenuSizeForScreen(const QRect & screen); int getLastVisibleAction() const;