0

我试图使用 QNetworkAccessmanager 向 localhost/conductor/api/provider_accounts.xml 发送请求,但问题是当我用浏览器打开它时,我得到了适当的输出,但是当我对 QNetworkAccessmanager 做同样的事情时,我什么也没有得到一点也不。这是我的代码

  void ServiceProvider::replyFinished(QNetworkReply * reply)
 {
 qDebug()<<reply->readAll();
 QString data=(QString)reply->readAll();
 qDebug()<<data;
 QXmlStreamReader xml(data);
 QXmlStreamAttributes attrib;
    while(!xml.atEnd()){
        xml.readNextStartElement();
        if(xml.name()=="name" && !xml.isEndElement()){
            attrib=xml.attributes();
            QString name=attrib.value("name").toString();
            qDebug()<<name;
            }
    }
}

void ServiceProvider::pushImage()
{
manager = new QNetworkAccessManager(this);
manager->get(QNetworkRequest(QUrl("https://localhost/conductor   
/api/provider_accounts.xml")));
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
}
4

1 回答 1

0

您无法阅读两次回复:

qDebug()<<reply->readAll();
QString data=(QString)reply->readAll();

上面的qDebug()行将消耗所有数据。您必须进行的第二次调用readAll()也是不正确的,因为它返回一个QByteArray. 您不能QString像上面那样简单地将其转换为并期望它起作用。您需要检查回复的编码并使用适当的转换函数,例如QString::fromUtf8(reply->readAll()).

于 2012-06-16T15:10:45.260 回答