节目结束后网络回复

Network reply after program ends

本文关键字:回复 网络 结束 节目      更新时间:2023-10-16

我写了一个程序,从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("%sn", source.toStdString().c_str());
}

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Get get; get.getCode();
    MainWindow window;
    printf("test pointn");
    return a.exec();
    //return 0;}

"test point"首先显示在屏幕上,然后是HTML代码。

网络管理器异步运行,这意味着主线程在调用get()方法后立即继续。

你可以通过设置一个等待下载完成的事件循环来解决这个问题:

  QEventLoop loop;
  connect(networkManager, SIGNAL(finished()), &loop, SLOT(quit()));
  loop.exec(QEventLoop::ExcludeUserInputEvents);