• 6598阅读
  • 4回复

QNetworkAccessManager  二次请求连接问题 [复制链接]

上一主题 下一主题
离线zhangyanhui
 
只看楼主 倒序阅读 楼主  发表于: 2012-06-21
在qt程序中,需要获得当前天气的信息,程序如下

{
//主函数如下,创建一个定时器,每隔10秒钟查询时间及天气信息,
manager = new QNetworkAccessManager(this);//程序启动,创建QNetworkAccessManager对象

ammeter_updateTimer = new QTimer(this);

connect(ammeter_updateTimer, SIGNAL(timeout()), this, SLOT(doQuery()));
ammeter_updateTimer->start(10*1000);
doQuery();
}

void doQuery()
{    QString url;
    if(1){
        url = "http://www.google.com/ig/api?hl=zh_cn&weather=Beijing";
    }else{
        url = "http://www.google.com/ig/api?hl=en&weather=Beijing";

    }
    request.setUrl(QUrl(url));
    reply = manager->get(request);
    connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
             this, SLOT(slotReadError(QNetworkReply::NetworkError)));
}
void slotReadyRead(){
//读取网页内容QString xmlFile = reply->readAll();
...........
}
void AmmeterShowForm::slotReadError(QNetworkReply::NetworkError error){
// 处理错误}
程序如上,但有个问题,假如程序启动时,假如网络不通的话,查询不到天气内容,但即使网络后来联通了,依然报  slotReadError,不知是什么问题,应该是某些资源没有释放,哪位达人知道原因,麻烦解答一下,谢谢。
离线lwtlwt0810

只看该作者 1楼 发表于: 2012-06-21
试试delete reply;再 reply = manager->get(request);
离线zhangyanhui
只看该作者 2楼 发表于: 2012-06-21
这个以前试过,好像直接delete reply会导致段错误,死机

我在slotReadError中作如下处理,还是不行
void AmmeterShowForm::slotReadError(QNetworkReply::NetworkError error){
    #if 0
    if(NULL!=manager){
       manager->deleteResource(request);
       disconnect(reply,0, 0, 0);
       reply->close();
       reply->deleteLater();
       manager->deleteLater();
       //delete  reply;
       //delete  manager;
       //delete  manager;
       printf("AmmeterShowForm::deleteLater!\n");
    }

    manager = new QNetworkAccessManager(this);

}
离线zhangyanhui
只看该作者 3楼 发表于: 2012-06-21
欢迎大家发表意见哈。。O(∩_∩)O谢谢
离线zhangyanhui
只看该作者 4楼 发表于: 2012-06-23
自己顶一下。
快速回复
限100 字节
 
上一个 下一个