diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 0bddf89b158..343ed70196f 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -992,8 +992,14 @@ int QEventDispatcherWin32::remainingTime(int timerId) quint64 currentTime = qt_msectime(); for (const WinTimerInfo *t : qAsConst(d->timerVec)) { - if (t && t->timerId == timerId) // timer found, return time to wait - return t->timeout > currentTime ? t->timeout - currentTime : 0; + if (t && t->timerId == timerId) { + // timer found, return time to wait + + if (d->internalHwnd) + return t->timeout > currentTime ? t->timeout - currentTime : 0; + else + return t->interval; + } } #ifndef QT_NO_DEBUG diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp index cd78da725c1..3b10547dc4c 100644 --- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp +++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp @@ -51,6 +51,8 @@ private slots: void singleShotTimeout(); void timeout(); void remainingTime(); + void remainingTimeInitial_data(); + void remainingTimeInitial(); void remainingTimeDuringActivation_data(); void remainingTimeDuringActivation(); void basic_chrono(); @@ -143,6 +145,33 @@ void tst_QTimer::remainingTime() QVERIFY2(remainingTime >= 50, qPrintable(QString::number(remainingTime))); } +void tst_QTimer::remainingTimeInitial_data() +{ + QTest::addColumn("startTimeMs"); + QTest::addColumn("timerType"); + + QTest::addRow("precise time 0ms") << 0 << Qt::PreciseTimer; + QTest::addRow("precise time 1ms") << 1 << Qt::PreciseTimer; + QTest::addRow("precise time 10ms") << 10 << Qt::PreciseTimer; + + QTest::addRow("coarse time 0ms") << 0 << Qt::CoarseTimer; + QTest::addRow("coarse time 1ms") << 1 << Qt::CoarseTimer; + QTest::addRow("coarse time 10ms") << 10 << Qt::CoarseTimer; +} + +void tst_QTimer::remainingTimeInitial() +{ + QFETCH(int, startTimeMs); + QFETCH(Qt::TimerType, timerType); + + QTimer timer; + timer.setTimerType(timerType); + timer.start(startTimeMs); + + const int rt = timer.remainingTime(); + QVERIFY2(rt >= 0 && rt <= startTimeMs, qPrintable(QString::number(rt))); +} + void tst_QTimer::remainingTimeDuringActivation_data() { QTest::addColumn("singleShot");