0

我正在从 a 中获取字节数据,我想从 aQImageQByteArray写入数据QByteArrayQVariantMap但是在存储字节后,字节被更改并且图像无效......

我试图QByteArray直接库存,但问题是我将从 Windows 手机、android 和 iOS 接收 QVariantMap(作为 JSON)。并且QByteArray这些操作系统上不存在,所以我怀疑该.toByteArray功能是否有效......

这是我尝试使用的示例,QStringQString填充时字节会更改...

QFile tmp("default_profile.jpg");

tmp.open(QIODevice::ReadOnly);

if (tmp.exists() == true)
{
    QByteArray tab;
    tab = tmp.read(tmp.size());

    int i = 0;
    char *data = tab.data();

    QString str;
    while (i != tmp.size())
    {
        if (i < 100)
            qDebug() << "AVANT = " << " i = " << i << "[" << *data + '0' << "]";
        i++;
        str.append(*data);
        ++data;
    }
    QVariantMap *tmp = new QVariantMap();   
    (*tmp)["name"] = "test.jpg";
    (*tmp)["data"] = str;
    (*tmp)["size"] = tab.size();
    (*tmp)["type"] = "PhonePic";

    this->fileReceived("", "", tmp);
}

这是fileReceived

    QFile tmp((*src)["name"].toString());

    tmp.open(QIODevice::ReadWrite | QIODevice::Truncate);
    char *test = (char *)malloc((*src)["size"].toInt());

    QString str;
    str = (*src)["data"].toString();

    int i = 0;
    char *data = const_cast<char *>(str.toStdString().c_str());

    while (i != 8143)
    {
        if (i < 100)
            qDebug() << "AFTER = " << " i = " << i << "[" << *data + '0' << "]";
        i++;
        ++data;
    }       

    qDebug() << tmp.write(str.toStdString().c_str(), (*src)["size"].toInt());

“AFTER” QString 的大小很好,但值不好......有人知道我做错了什么吗?或者也许知道我是如何做到的?

感谢那些愿意帮助我的人。

4

2 回答 2

0

您可以QImage直接在 aQVariant或中发送QVariantMap。您使用的特定 json 库将如何处理 json-to-Qt 接口,这完全是另一回事。

由于QVariant在 Qt Core 而不是 Qt Gui 中,因此在使用QVariant::value()GUIqvariant_cast()类型(例如QImage.

于 2013-09-03T21:18:07.453 回答
0

您将二进制数据加载到 QByteArray 中。然后你将这个 QByteArray 中的数据逐个字节地附加到一个 QString 中,它将每个字节转换为 unicode。最后但并非最不重要的一点是,您只是尝试将其转换回原始数据?没门。所以指出你做错了什么很容易。

帮助你要困难得多。当 QByteArray 不可用时,为什么您认为可以使用 QString?当 QVariantMap 可用时,你就有了一个完整的 Qt。所以使用 QByteArray 应该不是问题。但我必须承认,我不完全理解你的帖子和你的问题,所以我可能会忽略一些东西。

于 2013-08-13T21:16:00.797 回答