- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法将QHttpMultiPart
转换为QByteArray
或其他类似的二进制数据?
我发现QHttpMultiPart
非常方便地编写邮件数据格式,但似乎非常依赖QNetworkAccessManager
框架,并且据我搜索,没有直接的方法可以做到这一点。
我最接近的方法是将QHttpMultiPart
附加到从QIODevice
派生的QNetworkReply
对象,然后使用 QIODevice::readAll()
,但 QNetworkReply
没有公共(public)构造函数。
最佳答案
您可以子类化QNetworkAccessManager
:其createRequest()
方法(您必须实现)将接收一个包含所有发送数据的QIODevice
使用 POST
请求;因此,您只需在您的这个假网络访问管理器上调用 post(..., multiPart)
即可读取数据。
这是我编写的辅助类:
multipart.h:
#include <QByteArray>
#include <QIODevice>
#include <QScopedPointer>
class QHttpMultiPart;
class MultipartPrivate;
class Multipart
{
public:
Multipart();
virtual ~Multipart();
QByteArray toByteArray(QHttpMultiPart *multiPart);
private:
QScopedPointer<MultipartPrivate> d_ptr;
Q_DECLARE_PRIVATE(Multipart)
};
multipart.cpp:
#include "multipart.h"
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
class FakeReply: public QNetworkReply
{
Q_OBJECT
public:
FakeReply(const QNetworkRequest &req, QNetworkAccessManager *parent):
QNetworkReply(parent)
{
Q_UNUSED(req);
QNetworkReply::open(QIODevice::ReadOnly);
}
void abort() override {}
qint64 readData(char *, qint64) override { return 0; }
};
class MultipartPrivate: public QNetworkAccessManager
{
Q_OBJECT
using QNetworkAccessManager::QNetworkAccessManager;
QNetworkReply *createRequest(Operation op, const QNetworkRequest &req,
QIODevice *outgoingData) override {
Q_UNUSED(op);
m_data = outgoingData->readAll();
return new FakeReply(req, this);
}
public:
QByteArray m_data;
};
Multipart::Multipart():
d_ptr(new MultipartPrivate)
{
}
Multipart::~Multipart()
{
}
QByteArray Multipart::toByteArray(QHttpMultiPart *multiPart)
{
Q_D(Multipart);
QNetworkRequest dummy(QUrl("http://multipart.test"));
delete d->post(dummy, multiPart);
return d->m_data;
}
#include "multipart.moc"
您还可以在这里找到一些单元测试: https://gitlab.com/accounts-sso/libauthentication/commit/7d84cb417f756e663dca7362457b28bc53a1096a
关于qt5 - QHttpMultiPart 到 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735745/
我正在使用 QMap RegTable; (Seprate Class Variable) 用于存储 Modbus 寄存器地址和从串口接收到的数据。一切正常,从串口读取数据并正确填充到 QByteA
假设我们有一个功能商店 void store(const QByteArray& data); 此函数的工作是获取数据 并将其存储起来。不幸的是,如果参数是用 QByteArray::fromRawD
我有一个非常简单的加密/解密程序。加密后,我的程序将加密文本作为 QByteArray 返回,然后我将其保存到文本文件中。从文件中检索 ByteArray 进行解密时,我不确定它的格式是否正确,或者文
请帮助进行这些转换。这是输入; QByteArray byteArr; QBitArray bitArr; QFile file(adress); byteArr.readAll(file); 从字节
检查 QByteArray 的大小总是返回 4 个字节,我假设是由于 Qt 中隐式共享数据: int n = 50; //or n = 100, 200 QByteArray arr(n,'a');
我需要编写一个函数来获取 optional 的所有权的底层数组。 在Rust中,是这样实现的: fn my_func(f: &mut Option>) -> Box { //how to d
我想创建 SerialPort 类,它可以自动接收消息,然后发出信号。 但是当我编译它时显示错误信息: error: 'QObject' is an ambiguous base of 'Serial
正如您可能从标题中发现的那样,我在转换 QByteArray 时遇到了问题。为整数。 QByteArray buffer = server->read(8192); QByteArray q_si
我目前在使用 QSerialPort 时遇到了一些问题:当我使用一个示例中的函数时,它看起来像 QKeyEvent *e; emit getData(e->text().toLocal8Bit());
我有一个像这样的自定义结构: struct aReminderStruct{ QString name; QDate date; QTime time; QString
我正在使用 Qt 和 C++。我必须管理电子板的错误代码。我可以以必须将其转换为 QVariant 的 QByteArray 的形式获取这些错误。我没有找到任何实用的方法来做到这一点(所以如果你有一个
使用 QByteArray QIODevice::readAll()从 QT5 开始,我能够从 txt 文件或图像制作字节数组,之后使用解码并正确地重新创建文件。但是,当我尝试使用 .db 文件 (S
我有一个文本编辑器,我在其中键入十六进制数字,然后将此文本转换为 QByteArray。 这是我的代码: QByteArray parsedValue = QByteArray::fromHex(ex
尝试编写一个非常简单的 Qt 程序(因为这就是我的全部能力!)... ...我已将一个相当小的二进制文件读入 QbyteArray,我可以看到 QByteArray 正确地保存了该数据。我想将一个指向
我有以下代码需要从纯 C++ 转换为 qt: // txMessage and UserData are char arrays memcpy(&txMessage[18], UserData, 8)
我想在 Qt 中将数组转换为 QByteArray。有人可以解释这个概念吗?请举例说明。 最佳答案 QByteArray 有一个 constructor就是这样做的。 这是如何使用它: const c
为什么声明: QByteArray data (initialized somehow); if(data.at(0) == 0xFF) do_something(); 发出这样的警告:由于数据类型
从 QByteArray 开始,我想在我的 QByteArray 中搜索“\n”字符,并将所有字符从头到“\n”连接起来,并将它们保存在 QString 中;之后,我将传递到下一个“\n”之前的以下字
我需要转换一个 QString 这是 已经以十六进制格式转换为 QByteArray。例如: QString a = "AF5603B4" 应存储在 QByteArray 中: QByteArray
在我的程序中,我经常使用串行通信,所以 QByteArray经常使用。 我想知道是否有更短的方法来初始化 QByteArray具有特定字节比: const char test_data[] = {
我是一名优秀的程序员,十分优秀!