
1.概要
QTimer::singleShot
2.内容
QTimer::singleShot 是 Qt 框架中的一个静态函数,用于在指定的时间间隔后执行一次特定的函数或代码块。这个函数非常适用于那些只需要执行一次的任务,比如延迟初始化、延迟关闭窗口、延迟发送信号等场景。
使用方法
QTimer::singleShot 的基本使用格式如下:
QTimer::singleShot(int msec, const QObject *receiver, const char *member);
QTimer::singleShot(int msec, Func1 arg1, Func2 arg2 = defaultValue);
msec:延迟的毫秒数。receiver:接收信号的对象指针。member:接收对象中要调用的成员函数(槽函数)的名称,该函数必须是可以由信号触发的槽(slot)。Func1和Func2:可以是 lambda 表达式、函数指针或任何可以被调用的对象。第二个参数是可选的,取决于你使用的重载版本。
示例
- 使用成员函数(槽):
class MyClass : public QObject {
Q_OBJECT
public slots:
void mySlot() {
// 这里是延迟执行的代码
}
};
// 在某个地方创建 MyClass 的实例并调用 singleShot
MyClass myObject;
QTimer::singleShot(1000, &myObject, SLOT(mySlot()));
这里,mySlot 将在 1000 毫秒(1秒)后被调用。
- 使用 lambda 表达式:
QTimer::singleShot(1000, []() {
// 这里是延迟执行的代码
qDebug() << "1秒后执行";
});
这种方式更加灵活,不需要定义额外的槽函数。
注意事项
- 如果在调用
QTimer::singleShot时指定的延迟时间非常短,或者系统当前的任务队列很长,实际的延迟时间可能会比指定的时间稍长。 - 如果
receiver对象在延迟时间内被销毁,那么指定的成员函数将不会被调用,因此要确保receiver的生命周期足够长,至少要比延迟时间长。 - 使用 lambda 表达式时,要注意捕获列表的正确性,以避免内存泄漏或访问非法内存。
QTimer::singleShot 是 Qt 中一个非常实用的功能,适用于多种需要延迟执行任务的场景。
3.关联链接
QTimer::singleShot有几种重载,并分别举例-优快云博客
QTimer::start 在启动但状态下调用会有什么后果-优快云博客
QTimer::stop在停止的状态下调用会有什么后果-优快云博客
1204

被折叠的 条评论
为什么被折叠?



