在showevent事件中,用QTime::singleshot延迟去显示效果时,使用50ms达不到理想效果,使用的500ms可以达到理想效果,但是会异常到正常的变化效果。最后查看QTimer源码,发现可以使用
QTimer::singleshot(0, this, &MainWindow::showResult);
达到理想效果。源码中,当延迟0ms时候,会将槽函数放在事件队列里面,顺序触发相应的事件。
void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member)
{
if (Q_UNLIKELY(msec < 0)) {
qWarning("QTimer::singleShot: Timers cannot have negative timeouts");
return;
}
if (receiver && member) {
if (msec == 0) {
// special code shortpath for 0-timers
const char* bracketPosition = strchr(member, '(');
if (!bracketPosition || !(member[0] >= '0' && member[0] <= '2')) {
qWarning("QTimer::singleShot: Invalid slot specification");
return;
}
QByteArray methodName(member+1, bracketPosition - 1 - member); // extract method name
QMetaObject::invokeMethod(const_cast<QObject *>(receiver), methodName.constData(), Qt::QueuedConnection);
return;
}
(void) new QSingleShotTimer(msec, timerType, receiver, member);
}
}
在这里简单记录一下。