gpt4 book ai didi

c++ - QWebView 等待加载

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:59 25 4
gpt4 key购买 nike

bool MainWindow::waitForLoad(QWebView& view)
{
QEventLoop loopLoad;
QTimer timer;
QObject::connect(&view, SIGNAL(loadFinished(bool)), &loopLoad, SLOT(quit()));
QObject::connect(&timer, SIGNAL(timeout()), &loopLoad, SLOT(quit()));
timer.start(timeout);
loopLoad.exec();
if(!timer.isActive())
{
timer.stop();
view.stop();
return false;
}
return true;
}

告诉我,这是正确的代码吗?应用程序有时会在行后卡住

loopLoad.exec();

即使这里发生了一些问题(超时、加载时出错等——总是返回 true),也总是返回 true。

最佳答案

start(timeout); 以 msec 毫秒的超时间隔启动计时器。因此在调用它之后计时器开始运行并且 timer.isActive() 总是返回 true 并且 if block 不会被执行。

你应该在 loadFinished 发出时停止计时器:

QObject::connect(&view, SIGNAL(loadFinished(bool)), &timer, SLOT(stop()));

如果计时器处于事件状态,则事件循环会被计时器停止,因此您应该返回 false,因为已发生超时。您应该将 if(!timer.isActive()) 替换为 if(timer.isActive())

正确的代码是:

bool MainWindow::waitForLoad(QWebView& view)
{
QEventLoop loopLoad;
QTimer timer;
QObject::connect(&view, SIGNAL(loadFinished(bool)), &loopLoad, SLOT(quit()));
QObject::connect(&view, SIGNAL(loadFinished(bool)), &timer, SLOT(stop()));
QObject::connect(&timer, SIGNAL(timeout()), &loopLoad, SLOT(quit()));
timer.start(timeout);
loopLoad.exec();
if(timer.isActive())
{
timer.stop();
view.stop();
return false;
}

return true;
}

关于c++ - QWebView 等待加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24218444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com