Allow actions in a QMenu to show their tooltips

This introduces a property QMenu::toolTipsVisible with
default value set to 'false'.

Task-number: QTBUG-13663
Task-number: QTBUG-2362
Change-Id: I13079609e2a92adc71b2bbff3dd94494cde1f586
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
bb10
hjk 2013-01-18 13:43:40 +01:00 committed by The Qt Project
parent c6cb4ddbf9
commit efbecc1a94
3 changed files with 47 additions and 1 deletions

View File

@ -67,6 +67,7 @@
#include "qwidgetaction.h"
#include "qtoolbutton.h"
#include "qpushbutton.h"
#include "qtooltip.h"
#include <private/qpushbutton_p.h>
#include <private/qaction_p.h>
#include <private/qguiapplication_p.h>
@ -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<const QHelpEvent*>(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

View File

@ -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();

View File

@ -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;