使用"," QSettings :: IniFormat值。作为QStringList返回

时间:2014-12-18 23:47:58

标签: c++ qt qstring qtcore qsettings

我使用QSettings来解析ini文件:QSettings cfg(path, QSettings::IniFormat);

当我获得包含逗号的值QVariant qv = cfg.value("title");时,变体包含QStringList而不是QString

title=foo => QString
title=foo,bar => QStringList

我怎样才能总是得到字符串,或者至少获得原始行(title=foo,bar)?

1 个答案:

答案 0 :(得分:4)

您至少有两种方法可以解决此问题,所有这些方法都在下面提供:

test.ini

title="foo,bar"
title_unquoted=foo,bar

的main.cpp

#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;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make && ./main

输出

QVariant(QStringList, ("foo", "bar"))
"foo,bar"
QVariant(QString, "foo,bar")

换句话说,对具有特殊字符的字符串使用引号或在列表中手动连接字符串。如果它在你的控制之下,那么前者要好得多,因为在字符串中使用“特殊”字符时,你通常应该瞄准正确的引用。

相关问题