Reputation: 6074
I'm in search for an easy and foolproof way to convert an arbitrary QStringList
to a single QString
and back.
QStringList fruits;
fruits << "Banana", "Apple", "Orange";
QString packedFruits = pack(fruits);
QStringList unpackFruits = unpack(packedFruits);
// Should be true
// fruits == unpackFruits;
What might be the easiest solution for this kind of problem?
Upvotes: 17
Views: 36663
Reputation: 241
Previous answers mentioned QString::split
and QStringList::join
which is the correct way, but if the separator you choose is included in any of the strings it will break your conversion.
You must prevent strings in the list to contain your separator with one of the following techniques:
QByteArray::toHex(myString.toLatin1())
representation, then using a separator that has character(s) outside of the range 0..9 and a..f. Then convert back with QString::fromLatin1(QByteArray::fromHex(myHexString))
afterwardUpvotes: 7
Reputation: 19607
From QStringList
to QString
- QStringList::join
:
Joins all the string list's strings into a single string with each element separated by the given separator (which can be an empty string).
QString pack(QStringList const& list)
{
return list.join(reserved_separator);
}
From QString
to QStringList
- QString::split
:
Splits the string into substrings wherever
sep
occurs, and returns the list of those strings. Ifsep
does not match anywhere in the string,split()
returns a single-element list containing this string.
QStringList unpack(QString const& string)
{
return string.split(reserved_separator);
}
Upvotes: 33
Reputation: 4125
Use QStringList::join() :
QStringList strList;
strList << "Banana" << "Apple" << "Orange" ;
QString str = strList.join(""); // str = "BananaAppleOrange";
str = strList.join(","); // str = "Banana,Apple,Orange";
Upvotes: 6