Qt C++ 槽函数阻塞执行:事件循环实现
在 Qt 中,槽函数是通过连接 (connect) 语句与信号进行关联的。默认情况下,槽函数是在信号被触发时立即执行的,不会阻塞程序的运行。
如果你希望槽函数的执行能够阻塞程序的运行,可以考虑使用 Qt 的事件循环机制。通过使用 QEventLoop 类,可以创建一个事件循环,然后在槽函数中调用 exec() 函数来启动该事件循环。这样,槽函数将阻塞程序的运行,直到事件循环被退出。
以下是一个示例代码:
#include <QCoreApplication>
#include <QEventLoop>
#include <QDebug>
class MyClass : public QObject
{
Q_OBJECT
public slots:
void mySlot()
{
qDebug() << 'Start blocking...';
QEventLoop loop;
QTimer::singleShot(5000, &loop, SLOT(quit())); // 5秒后退出事件循环
loop.exec(); // 启动事件循环,阻塞程序运行
qDebug() << 'Blocking finished.';
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyClass myObject;
QObject::connect(&myObject, SIGNAL(mySignal()), &myObject, SLOT(mySlot()));
emit myObject.mySignal(); // 触发信号,执行槽函数
return a.exec();
}
在上述示例中,mySlot() 函数通过调用 QEventLoop 的 exec() 函数启动了一个事件循环,然后通过 QTimer::singleShot() 函数设置了 5 秒后退出事件循环。因此,在执行到 loop.exec() 之后,程序将被阻塞 5 秒钟,直到事件循环被退出。
原文地址: https://www.cveoy.top/t/topic/qoI4 著作权归作者所有。请勿转载和采集!