我编写的程序从url获取网页的源代码,但我有问题,因为这个代码在程序结束时打印在屏幕上,我不能使用我下载的数据。我认为问题是因为程序等待SIGNAL(finished())。有没有办法在结束前处理我程序中的下载数据?
void Get::getCode()
{
networkManager = new QNetworkAccessManager(this);
link = "http://example.com/";
networkManager->get(QNetworkRequest(QUrl(link)));
connect(networkManager, SIGNAL(finished(QNetworkReply*)), &process, SLOT(replyFinished(QNetworkReply*)));
//QDesktopServices::openUrl(QUrl(link));
}
...
void Process::replyFinished(QNetworkReply* pReply)
{
QString source(pReply->readAll());
printf("%s\n", source.toStdString().c_str());
}
...
int main(int argc, char *argv[]){
QApplication a(argc, argv);
Get get; get.getCode();
MainWindow window;
printf("test point\n");
return a.exec();
//return 0;}
"测试点"是第一个在屏幕和后来的HTML代码。
答案 0 :(得分:0)
网络管理器运行异步,这意味着您的主线程在调用get()方法后立即继续。
您可以通过设置一个等待下载完成的事件循环来解决此问题:
QEventLoop loop;
connect(networkManager, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec(QEventLoop::ExcludeUserInputEvents);
这应该会给你预期的结果。