试图使用线程、定时器,延时执行,会发现十分的麻烦。
这是因为现在代码都涉及到线程,比如主线程中禁止什么允许什么。
如何在QT中延时执行一段代码?
-
被动调用。比如在resize()中,可以直接使用定时器:
video_timer = new QTimer(this); connect(video_timer, &QTimer::timeout, this, &VideoWidget::onTimeout); video_timer->start(1000); -
主动调用。比如收到消息,执行操作:
//第一步
QMetaObject::invokeMethod(this, "onReplay", Qt::QueuedConnection);//第二步
void VideoWidget::onReplay()
{
qDebug() << "================== onReplay";
QTimer::singleShot(3000, this {
QMetaObject::invokeMethod(this, "playAction", Qt::QueuedConnection);
});
}