Qt C++下载XML文件并在textEdit中显示
Qt C++ downloading a XML file and showing it in textEdit
我在从服务器下载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));
}
并回复完成插槽:
void DownloadXML::replyFinished(QNetworkReply *reply){
reply->deleteLater();
data = reply->readAll();
}
我的问题是:当我第一次单击按钮时,xml文件没有显示在textEdit中,但是当我第二次单击按钮时,xml文件正常显示。我该如何解决这个问题?我认为我必须在程序中等待下载的数据,但我不知道该怎么做。
对不起我的英语
问题是ui->textEdit->insertPlainText(QString::fromAscii(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();
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 密码登录程序将永远循环并显示不正确的结果
- Qt C++下载XML文件并在textEdit中显示