将QStringList打包到QString并将其解包

时间:2016-05-31 07:04:46

标签: c++ qt qstring

我正在寻找一种简单而万无一失的方式将任意QStringList转换为单QString并返回。

QStringList fruits;
fruits << "Banana", "Apple", "Orange";
QString packedFruits = pack(fruits);
QStringList unpackFruits = unpack(packedFruits);

// Should be true 
// fruits == unpackFruits;

对于这类问题,最简单的解决办法是什么?

3 个答案:

答案 0 :(得分:21)

QStringListQString - QStringList::join

  

将所有字符串列表的字符串连接成一个字符串,每个元素由给定的分隔符分隔(可以是空字符串)。

QString pack(QStringList const& list)
{
    return list.join(reserved_separator);
}

QStringQStringList - QString::split

  

将字符串拆分为sep出现的子字符串,并返回这些字符串的列表。如果sep与字符串中的任何位置不匹配,split()将返回包含此字符串的单个元素列表。

QStringList unpack(QString const& string)
{
    return string.split(reserved_separator);
}

答案 1 :(得分:5)

之前的答案提到了QString::splitQStringList::join,这是正确的方法,但如果您选择的分隔符包含在任何字符串中,则会导致转换中断。

您必须使用以下技术之一阻止列表中的字符串包含您的分隔符:

  • 如果任何字符串包含分隔符
  • ,则在QStringList :: join之前抛出错误
  • 确保它们不能包含分隔符(例如,使用其QByteArray::toHex(myString.toLatin1())表示形式存储字符串,然后使用具有0..9和a..f范围之外的字符的分隔符。然后之后转换回QString::fromLatin1(QByteArray::fromHex(myHexString))
  • 使用任何分隔符,无论字符串是否包含它,但在join()之前为它实现转义逻辑,并在split()之后实现un-escape逻辑,以便分隔符永远不会出现在任何字符串中在加入时,但它的所有实例都将被恢复。

答案 2 :(得分:3)

使用QStringList::join()

QStringList strList;
strList << "Banana" << "Apple" << "Orange" ;

QString str = strList.join("");  // str = "BananaAppleOrange";
str = strList.join(",");  // str = "Banana,Apple,Orange";