下面是一个使用QEventLoop类创建嵌套事件循环对象来延迟关闭QWidget的示例代码:
#include <QApplication>
#include <QWidget>
#include <QTimer>
#include <QEventLoop>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget widget;
widget.setWindowTitle("Delayed Close Example");
widget.show();
QTimer::singleShot(1000, [&]() {
QEventLoop loop;
QTimer::singleShot(0, &loop, SLOT(quit())); // 触发退出信号,结束嵌套事件循环
loop.exec(); // 进入嵌套事件循环,等待直到quit()被调用
widget.close();
});
return app.exec();
}
在这个示例中,首先创建了一个QWidget窗口,并设置了标题并显示。然后,通过QTimer::singleShot函数设置一个1秒的定时器,在定时器触发后进入lambda函数内部。
在lambda函数内部,我们创建了一个QEventLoop对象loop,并将其与一个立即触发的定时器连接起来。这个立即触发的定时器会在进入嵌套事件循环后立即触发quit()槽函数,从而结束嵌套事件循环。
接着,我们调用loop.exec()进入嵌套事件循环状态,并等待直到quit()被调用才会继续执行后续代码。当quit()被调用后,程序会关闭QWidget窗口。
最后,通过app.exec()启动Qt应用程序的主事件循环。
这样,QWidget窗口会在延迟1秒后关闭。
内容由零声教学AI助手提供,问题来源于学员提问