Important: Please read the Qt Code of Conduct -

I want to block my program until finishing the download !

  • Hi . I am new in QT and I wrote a code for download file using QNetworkAccessManager , but I want to block my code until the download finishs.

    this is my main :

    int main(int argc, char *argv[])
        QCoreApplication app(argc, argv);
        MyClass* obj = new MyClass();
        obj->downloadToQString(QUrl( "" ));
        if ( obj->error == false )
            qDebug() << obj->result;
            qDebug() << "Error : " <<obj->errorString;

    my request for download :

    void downloadToQString(QUrl url)
            error = false;
            errorString = "";
            result = "";
            reply = nam.get(QNetworkRequest(url));
            QObject::connect(reply, SIGNAL(finished()), this, SLOT(onFinishedQString()));

    because download don't make block the program , it continues it's running and main prints empty string in output.

    I know Threading is good but it will be hard for me to handle it.

  • Hello,

    In your method downloadToQString, you connect your QNetworkReply* to a slot of your class MyClass. Why don't you print the result in this method ?

  • @mistralegna Hi . I wrote this code just for testing downloading does work correctly or not.

    I will use this class in GUI project not in console. first I must prevent user from doing anything before download completes and after knowing the result of download , decide what i have to do.

  • @bluemmb sorry I mean Widget Application.

  • Moderators

    Basically this is possible (e.g. using a "local" QEventLoop), but since you mentioned that you want to use it in GUI it would be way better usability/UX design if you show for example a modal dialog as long as the download isn't finished.

    You could use a QProgressDialog or even a custom QDialog subclass and set them modal. So the user knows that something is going on instead of a simply unresponding application.

  • @raven-worx thanks , i have been doing what you have told.
    But i really want to know how we can do it , is there any way at all ?

  • Moderators


    QNetworkReply* reply = nam->get( request )  ;
    QEventLoop loop;
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

  • @bluemmb thanks very much , i used your code in another place :)

Log in to reply