私は、任意のQStringList
を単一のQString
に変換して元に戻す簡単で確実な方法を探しています。
QStringList fruits;
fruits << "Banana", "Apple", "Orange";
QString packedFruits = pack(fruits);
QStringList unpackFruits = unpack(packedFruits);
// Should be true
// fruits == unpackFruits;
この種の問題の最も簡単な解決策は何でしょうか?
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);
}
_
以前の回答では、_QString::split
_と_QStringList::join
_が正しい方法であると述べていましたが、選択した区切り文字がいずれかの文字列に含まれていると、変換が失敗します。
次のいずれかの方法で、リスト内の文字列にセパレータが含まれないようにする必要があります。
QByteArray::toHex(myString.toLatin1())
表現で格納し、0..9およびa..fの範囲外の文字を持つ区切り文字を使用します。次に変換します。後でQString::fromLatin1(QByteArray::fromHex(myHexString))
で戻るQStringList :: join() を使用します:
QStringList strList;
strList << "Banana" << "Apple" << "Orange" ;
QString str = strList.join(""); // str = "BananaAppleOrange";
str = strList.join(","); // str = "Banana,Apple,Orange";