QWidget - add property toolTipDuration

This adds a property that specifies how long a tooltip is displayed.

This partly solves:
Task-number: QTBUG-1016

Change-Id: Ieea218bbcb869f6b48e72913d967e74fa792f2e2
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
This commit is contained in:
Thorbjørn Martsum 2013-06-23 08:46:55 +02:00 committed by The Qt Project
parent b11cb96f28
commit 241ba7dc07
4 changed files with 80 additions and 8 deletions

View File

@ -242,6 +242,9 @@ QWidgetPrivate::QWidgetPrivate(int version)
, graphicsEffect(0)
#if !defined(QT_NO_IM)
, imHints(Qt::ImhNone)
#endif
#ifndef QT_NO_TOOLTIP
, toolTipDuration(-1)
#endif
, inheritedFontResolveMask(0)
, inheritedPaletteResolveMask(0)
@ -8193,7 +8196,7 @@ bool QWidget::event(QEvent *event)
#ifndef QT_NO_TOOLTIP
case QEvent::ToolTip:
if (!d->toolTip.isEmpty())
QToolTip::showText(static_cast<QHelpEvent*>(event)->globalPos(), d->toolTip, this);
QToolTip::showText(static_cast<QHelpEvent*>(event)->globalPos(), d->toolTip, this, QRect(), d->toolTipDuration);
else
event->ignore();
break;
@ -10410,6 +10413,30 @@ QString QWidget::toolTip() const
Q_D(const QWidget);
return d->toolTip;
}
/*!
\property QWidget::toolTipDuration
\brief the widget's tooltip duration
\since 5.2
Specifies how long time the tooltip will be displayed, in milliseconds.
If the value is -1 (default) the duration is calculated depending on the length of the tooltip.
\sa toolTip
*/
void QWidget::setToolTipDuration(int msec)
{
Q_D(QWidget);
d->toolTipDuration = msec;
}
int QWidget::toolTipDuration() const
{
Q_D(const QWidget);
return d->toolTipDuration;
}
#endif // QT_NO_TOOLTIP

View File

@ -178,6 +178,7 @@ class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified DESIGNABLE isWindow)
#ifndef QT_NO_TOOLTIP
Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)
Q_PROPERTY(int toolTipDuration READ toolTipDuration WRITE setToolTipDuration)
#endif
#ifndef QT_NO_STATUSTIP
Q_PROPERTY(QString statusTip READ statusTip WRITE setStatusTip)
@ -376,6 +377,8 @@ public:
#ifndef QT_NO_TOOLTIP
void setToolTip(const QString &);
QString toolTip() const;
void setToolTipDuration(int msec);
int toolTipDuration() const;
#endif
#ifndef QT_NO_STATUSTIP
void setStatusTip(const QString &);

View File

@ -644,6 +644,7 @@ public:
QRegion dirty;
#ifndef QT_NO_TOOLTIP
QString toolTip;
int toolTipDuration;
#endif
#ifndef QT_NO_STATUSTIP
QString statusTip;

View File

@ -39,29 +39,70 @@
**
****************************************************************************/
#include <QtWidgets>
#include <QTest>
#include <QDialog>
#include <QToolTip>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
void showSomeToolTips()
class TestDialog : public QDialog
{
Q_OBJECT
public:
TestDialog();
protected slots:
void showSomeToolTips();
};
void TestDialog::showSomeToolTips()
{
QPoint p(100 + 20, 100 + 20);
for (int u = 1; u < 20; u += 5) {
QString s = "Seconds: " + QString::number(u);
QString s = tr("Seconds: ") + QString::number(u);
QToolTip::showText(p, s, 0, QRect(), 1000 * u);
QTest::qWait((u + 1) * 1000);
}
QToolTip::showText(p, "Seconds: 2", 0, QRect(), 2000);
QToolTip::showText(p, tr("Seconds: 2"), 0, QRect(), 2000);
QTest::qWait(3000);
QToolTip::showText(p, "Standard label", 0, QRect());
QToolTip::showText(p, tr("Standard label"), 0, QRect());
QTest::qWait(12000);
}
TestDialog::TestDialog()
{
// Notice that these tool tips will disappear if another tool tip is shown.
QLabel *label1 = new QLabel(tr("Tooltip - Only two seconds display"));
label1->setToolTip(tr("2 seconds display"));
label1->setToolTipDuration(2000);
Q_ASSERT(label1->toolTipDuration() == 2000);
QLabel *label2 = new QLabel(tr("Tooltip - 30 seconds display time"));
label2->setToolTip(tr("30 seconds display"));
label2->setToolTipDuration(30000);
QPushButton *pb = new QPushButton(tr("&Test"));
pb->setToolTip(tr("Show some tool tips."));
Q_ASSERT(pb->toolTipDuration() == -1);
connect(pb, SIGNAL(clicked()), this, SLOT(showSomeToolTips()));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label1);
layout->addWidget(label2);
layout->addWidget(pb);
setLayout(layout);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
showSomeToolTips();
return 0;
TestDialog dlg;
dlg.show();
return app.exec();
}
#include "main.moc"