J'utilise des fonctions pour convertir QVector's
à QByteArray's
, par exemple:Comment puis-je convertir QByteArray en chaîne dans Qt 5.3?
QByteArray Serialize::serialize(QVector<double> data)
{
QByteArray byteArray;
QDataStream out(&byteArray, QIODevice::WriteOnly);
out << data;
return byteArray;
}
void Serialize::deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
Maintenant, que j'ai le QByteArray
que je dois le mettre dans un fichier texte, comment puis-je convertir en QString
?
je l'ai déjà essayé la façon la plus simple:
QString myString(data); // data - QByteArray
Mais myString
est toujours vide.
J'ai également trouvé la fonction toStdString()
dans la documentation, mais elle a été introduite seulement dans Qt 5.4. J'utilise Qt 5.3.
Suit un exemple complet:
#include <QCoreApplication>
#include <QDebug>
#include <QVector>
#include <QByteArray>
#include <QDataStream>
QByteArray serialize(QVector<double> data)
{
QByteArray byteArray;
QDataStream out(&byteArray, QIODevice::WriteOnly);
out << data;
return byteArray;
}
void deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVector<double> data;
data << 1.1 << 2.2 << 3.3 << 4.4 << 5.5 << 6.6 << 7.7 << 8.8 << 9.9;
QByteArray byteArray = serialize(data);
QVector<double> dataConverted;
deserialize(byteArray, &dataConverted);
qDebug() << "Data:";
qDebug() << data;
qDebug() << "ByteArray:";
QString test(byteArray);
qDebug() << test;
qDebug() << "Data Converted:";
qDebug() << dataConverted;
return a.exec();
}
Remarque: L'objectif général de c'est de générer un fichier SQL avec tout le contenu de la base de données SQLite . Mon double vecteur est converti en QByteArray
et stocké en tant que BLOB dans la base de données (à l'aide de la fonction sérialiser). Quand j'ai besoin de le charger depuis la base de données, j'utilise la fonction deserialize pour la convertir en un double vecteur. Maintenant, je dois générer le fichier SQL avec les données dans le format BLOB, puis je peux directement l'importer dans une autre base de données.
Merci beaucoup pour l'explication complète. Maintenant, j'ai compris le problème, mais je ne sais toujours pas comment je peux l'imprimer. Savez-vous comment puis-je imprimer le tableau d'octets? J'ai besoin de générer un fichier ** SQL ** avec le contenu ** BLOB ** (généré par un 'QByteArray') de la base de données. – KelvinS
Je suis peut-être malentendu, mais ne pourriez-vous pas simplement faire une boucle sur le vecteur, en imprimant chaque élément à une chaîne? Exemple très basique: 'QString printVector (QVecteur * vectoriel) { QSortie de sortie; pour (int indice = 0; index < vector-> longueur(); index ++) { sortie + = QString :: nombre (vector-> at (index)) + ","; } sortie de retour; } ' –
Benp44
En fait, je ne peux pas parce qu'il retournera simplement le double vecteur comme un ** QString ** (par exemple" 1,2,123,2,42.1 "). J'ai besoin de l'imprimer en tant que tableau d'octets dans le fichier ** SQL ** car je devrai l'importer dans une autre base de données. Exemple: "' INSERT INTO myTable VALUES (14, "nom", here_is_my_blob_type_saved_as_qbytearray); '". ** Note **: J'utilise ** SQLite **. – KelvinS