C++ Qt C++;下载XML文件并在文本编辑中显示

C++ Qt C++;下载XML文件并在文本编辑中显示,c++,xml,qt,C++,Xml,Qt,我在从服务器下载XML文件时遇到问题。有一些代码: QByteArray data; ... void DownloadXML::on_pushButton_clicked() { QUrl address = "abc.com/file.xml" QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkRe

我在从服务器下载XML文件时遇到问题。有一些代码:

QByteArray data;
...
void DownloadXML::on_pushButton_clicked()
{
     QUrl address = "abc.com/file.xml"

     QNetworkAccessManager *manager = new QNetworkAccessManager(this);
     connect(manager, SIGNAL(finished(QNetworkReply*)),
     this, SLOT(replyFinished(QNetworkReply*)));

     QNetworkRequest request;
     request.setUrl(address); 
     manager->get(request);

     ui->textEdit->insertPlainText(QString::fromAscii(data));
}
和replyFinished插槽:

void DownloadXML::replyFinished(QNetworkReply *reply){
    reply->deleteLater();
    data = reply->readAll();
}
我的问题是:当我第一次单击按钮时,xml文件不会显示在textEdit中,但当我第二次单击按钮时,xml文件会正常显示。我怎样才能解决这个问题?我想我必须在程序中等待下载的数据,但我不知道怎么做


顺便说一句,对不起我的英语问题是
ui->textEdit->insertPlainText(QString::fromscii(data))。拆下那条线,然后

将您的插槽更改为:

void DownloadXML::replyFinished(QNetworkReply *reply){
    reply->deleteLater();
    data = reply->readAll();
    ui->textEdit->insertPlainText(QString::fromAscii(data));
}
或者,您可以使用
QEventLoop
等待信号被调用

void DownloadXML::on_pushButton_clicked()
{
     QUrl address = "abc.com/file.xml"

     QNetworkAccessManager *manager = new QNetworkAccessManager(this);

     QNetworkRequest request;
     request.setUrl(address); 
     QNetworkReply *reply = manager->get(request);

     QEventLoop loop;
     connect(manager, SIGNAL(finished()), &loop, SLOT(quit()));
     loop.exec();

     if(reply->error() == QNetworkReply::NoError)
     {
         //No Error
         reply->deleteLater();
         data = reply->readAll();
         ui->textEdit->insertPlainText(QString::fromAscii(data));
     }
     loop.quit();
}

是否有办法在点击按钮()上的
中执行此操作
?我想对这个XML文件做些什么。@当然,请参阅我的编辑。不再需要任何插槽。我在我的许多项目中都使用了这种精确的设置。哦,就是这样。非常感谢你的帮助!