From 241ba7dc071e563ca89ac681a4aafbee555bef36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Martsum?= Date: Sun, 23 Jun 2013 08:46:55 +0200 Subject: 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 --- src/widgets/kernel/qwidget.cpp | 29 +++++++++++++- src/widgets/kernel/qwidget.h | 3 ++ src/widgets/kernel/qwidget_p.h | 1 + tests/manual/widgets/kernel/qtooltip/main.cpp | 55 +++++++++++++++++++++++---- 4 files changed, 80 insertions(+), 8 deletions(-) diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index cfccce7c41..3eb949f814 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -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(event)->globalPos(), d->toolTip, this); + QToolTip::showText(static_cast(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 diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h index f90f2ee5f5..f579dbb9cd 100644 --- a/src/widgets/kernel/qwidget.h +++ b/src/widgets/kernel/qwidget.h @@ -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 &); diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index 50f32af8b0..111dd7f9c5 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -644,6 +644,7 @@ public: QRegion dirty; #ifndef QT_NO_TOOLTIP QString toolTip; + int toolTipDuration; #endif #ifndef QT_NO_STATUSTIP QString statusTip; diff --git a/tests/manual/widgets/kernel/qtooltip/main.cpp b/tests/manual/widgets/kernel/qtooltip/main.cpp index d8621de6db..d0f0db8ff5 100644 --- a/tests/manual/widgets/kernel/qtooltip/main.cpp +++ b/tests/manual/widgets/kernel/qtooltip/main.cpp @@ -39,29 +39,70 @@ ** ****************************************************************************/ -#include #include +#include +#include +#include +#include +#include -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" -- cgit v1.2.3