我使用QSettings
来解析ini文件:QSettings cfg(path, QSettings::IniFormat);
当我获得包含逗号的值QVariant qv = cfg.value("title");
时,变体包含QStringList
而不是QString
title=foo => QString
title=foo,bar => QStringList
我怎样才能总是得到字符串,或者至少获得原始行(title=foo,bar
)?
答案 0 :(得分:4)
您至少有两种方法可以解决此问题,所有这些方法都在下面提供:
title="foo,bar"
title_unquoted=foo,bar
#include <QSettings>
#include <QDebug>
int main()
{
QSettings settings("test.ini", QSettings::IniFormat);
// Original issue
qDebug() << settings.value("title_unquoted");
// 1st solution: join the strings
qDebug() << settings.value("title").toStringList().join(',');
// 2nd solution: use quotes in the ini file
qDebug() << settings.value("title");
return 0;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
qmake && make && ./main
QVariant(QStringList, ("foo", "bar"))
"foo,bar"
QVariant(QString, "foo,bar")
换句话说,对具有特殊字符的字符串使用引号或在列表中手动连接字符串。如果它在你的控制之下,那么前者要好得多,因为在字符串中使用“特殊”字符时,你通常应该瞄准正确的引用。