QNetworkAccessManager使用注意事项

要注意QNetworkAccessManager实例是建立在栈中还是在堆上(new)。

由于网络访问所需的时间通常“较长”,当QNetworkAccessManager实例建立在栈中,如QNetworkAccessManager manager时,如果还没有收到QNetworkAccessManager::finished信号而manager已经不存在了,那么connect()函数就一直不会被执行。
可以在栈结束前调用一下QNetworkReply::isFinished()来看看是否收到了finished()信号,如

       if(reply->isFinished()) qDebug("Finished");
       else qDebug("Wait");

一个解决方法是把QNetworkAccessManager实例建立在堆上,如QNetworkAccessManager *manager= new QNetworkAccessManager();,但是要记得使用后释放内存,可以在connect()中用manager->deleteLater();

在qt creator中运行程序时,可以根据Application Output的输出来判断是否还有内存没有释放。如果有内存没有释放时,即使关掉了程序界面,Application Output也不会显示 xxxx exited with code 0。

你可能感兴趣的:(Qt,Tips)