C++ Qt C++;下载XML文件并在文本编辑中显示
我在从服务器下载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
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))在发出管理器的完成信号之前调用code>。拆下那条线,然后
将您的插槽更改为:
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文件做些什么。@当然,请参阅我的编辑。不再需要任何插槽。我在我的许多项目中都使用了这种精确的设置。哦,就是这样。非常感谢你的帮助!