QIODevice::read:设备未打开远程JSON文件QT
QIODevice::read: device not open Remote JSON File QT
这让我抓狂。一直在到处寻找解决方案,但令人惊讶的是,将远程JSON文件加载到QT中的方法很少。
我有这样的代码,当我尝试加载本地文件时,它可以很好地工作。
QFile jsonFile("/Users/blah/blah/myfile.json");
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Unable to open file, exiting...";
return;
}
QByteArray jsonData = jsonFile.readAll();
QJsonDocument doc = QJsonDocument::fromJson(jsonData);
QJsonObject jObject = doc.object();
QVariantMap json_map = jObject.toVariantMap();
QString getNow = json_map["now"].toString();
QString getImage = json_map["image"].toString();
QString getNext = json_map["next"].toString();
ui->live1->setText(getNow);
ui->live2->setText(getImage);
ui->live3->setText(getNext);
但在过去的5个小时里,我所尝试的一切都无法加载远程文件,我找不到一个直接的解释来说明如何实现这么简单的事情。
QFile jsonFile("https://myserver.com/myfile.json");
QUrl jsonFile("https://myserver.com/myfile.json");
还有一大堆其他方法,包括QTextStream和我认为可能会这样做的任何其他方法,这似乎超出了我想要做的范围。但一切要么都会返回。。。
QIODevice::read: device not open
或者一系列其他错误让我知道我搞砸了。
有人能帮我摆脱痛苦吗?
**编辑**
使用QNetwork库,但现在在QObject::connect
行上抛出expected expression
错误?
QNetworkAccessManager manager;
QNetworkRequest request(QUrl("https://myserver.com/myfile.json"));
QNetworkReply *reply = manager.get(request);
QObject::connect(reply, &QNetworkReply::finished, [&]() {
QByteArray data = reply->readAll();
QJsonDocument doc = QJsonDocument::fromJson(data);
QJsonObject jObject = doc.object();
QVariantMap json_map = jObject.toVariantMap();
QString getNow = json_map["now"].toString();
QString getImage = json_map["image"].toString();
QString getNext = json_map["next"].toString();
ui->live1->setText(getNow);
ui->live2->setText(getImage);
ui->live3->setText(getNext);
reply->deleteLater();
});
**编辑2*
我刚刚意识到我需要包含C++11编译器
CONFIG += c++11
但现在它只是精神上抛出SSL错误
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_server_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSL_select_next_proto
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
**编辑3**
正在取得一些进展(我想…)
QT似乎使用的是旧版本的SSL(根据文档可能不支持)。
当被问及SSL时,QDebug吐出了这个。。。
Support SSL: true
Lib Version Number: 9470431
Lib Version String: "OpenSSL 0.9.8zh 14 Jan 2016"
Lib Build Version Number: 268439727
Lib Build Version String: "OpenSSL 1.0.1j 15 Oct 2014"
所以现在我需要弄清楚如何让QT使用我机器上的新版本。
QFile
不支持远程URI。为此,您需要使用QtNetwork。
下面的C++11示例演示了如何从远程URI:中检索JSON
QNetworkAccessManager manager;
QNetworkRequest request(QUrl("http://example.com/file.json"));
QNetworkReply *reply = manager.get(request);
QObject::connect(reply, &QNetworkReply::finished, [&]() {
QByteArray data = reply->readAll();
// do stuff with data
reply->deleteLater();
});
相关文章:
- 如何在特定位置追加 json 文件
- 如何在Visual C+++中从JSON文件中读取节点数据
- 如何将 json 数据附加到 Qt 中的现有 json 文件中
- 当前步骤:构建任务.json 文件
- 可以在JSON文件的帮助下在Qt中创建UI表单
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组
- 有没有办法从Makefile访问VS Code c_cpp_properties.json文件中的定义
- 保存json文件后如何返回文件路径
- 构造一个类似于JSON文件c++的字符串
- 使用 jsoncpp 读取 JSON 文件
- 在C++中打开 json 文件时遇到问题
- Nlohmann 在不知道密钥的情况下解析 JSON 文件
- 如何使用 rapidjson 读取 json 文件并输出到 std::string?
- 如何使用QJSONARRAY在QT5(C )中解析JSON文件(数组)
- 使用RapidJson凝结JSON文件后,如何将输出存储在C 字符串中
- C++ 使用 json 文件提升程序选项
- 如何将值数组从 json 文件读取到 c++ 数组
- 在大型 JSON 文件中查找文本
- FlatBuffers:未支撑的工会向量错误将JSON文件转换为二进制文件
- 如何将JSON文件中的数据转换为值(double,int ..)