我正在寻找一种简单而万无一失的方式将任意QStringList
转换为单QString
并返回。
QStringList fruits;
fruits << "Banana", "Apple", "Orange";
QString packedFruits = pack(fruits);
QStringList unpackFruits = unpack(packedFruits);
// Should be true
// fruits == unpackFruits;
对于这类问题,最简单的解决办法是什么?
答案 0 :(得分:21)
从QStringList
到QString
- QStringList::join
:
将所有字符串列表的字符串连接成一个字符串,每个元素由给定的分隔符分隔(可以是空字符串)。
QString pack(QStringList const& list)
{
return list.join(reserved_separator);
}
从QString
到QStringList
- QString::split
:
将字符串拆分为
sep
出现的子字符串,并返回这些字符串的列表。如果sep
与字符串中的任何位置不匹配,split()
将返回包含此字符串的单个元素列表。
QStringList unpack(QString const& string)
{
return string.split(reserved_separator);
}
答案 1 :(得分:5)
之前的答案提到了QString::split
和QStringList::join
,这是正确的方法,但如果您选择的分隔符包含在任何字符串中,则会导致转换中断。
您必须使用以下技术之一阻止列表中的字符串包含您的分隔符:
QByteArray::toHex(myString.toLatin1())
表示形式存储字符串,然后使用具有0..9和a..f范围之外的字符的分隔符。然后之后转换回QString::fromLatin1(QByteArray::fromHex(myHexString))
答案 2 :(得分:3)
QStringList strList;
strList << "Banana" << "Apple" << "Orange" ;
QString str = strList.join(""); // str = "BananaAppleOrange";
str = strList.join(","); // str = "Banana,Apple,Orange";