2013-05-10 2 views
0

Я QNetworkAccessManager для обработки отправить запрос HTTP:.Qt: QNetworkAccessManager не пошлите запрос

void f() 
{  
    QNetworkRequest request(QUrl(address));  
    QNetworkAccessManager mng; 
    mng.get(request); 
    //QEventLoop().exec(); 
    } 
void main() 
{ 
    ... 
    f(); 
    ... 
} 

Если без линии QEventLoop() Exec() ;, приложение не будет посылать запрос. Но если с строкой QEventLoop(). Exec() ;, она будет. Почему я не понимаю?
Можете ли вы меня убрать?
Большое спасибо! (P/s: Я видел эту ссылку: Sending an HTTP request using QNetworkAccessManager)

ответ

0
void f()  
{   
    static QNetworkRequest request(QUrl(address));   
    static QNetworkAccessManager mng; 
    mng.get(request); 
} 
void main() 
{ 
    ... 
    f(); 
    ... 
} 

Я думаю, это потому, что QNetworkAccessManager является асинхронным и нужно время, чтобы отправить запрос. Но require, url, query, ... уничтожается, когда выходит из области видимости. -> нам нужно, когда QNetworkAccessManager отправляет запрос (используйте QEventLoop(). Exec();) или разрешите требовать, url, query, ... persistent (объявить его статическим).

Смежные вопросы