Значения QSettings :: IniFormat с & quot;, & quot; возвращается как QStringList

я использую 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

Решение

У вас есть как минимум два способа решения этой проблемы, все они представлены ниже:

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")

Другими словами, используйте кавычки для строк со специальными символами или присоединяйте строки вручную в списке. Первое гораздо лучше, если оно находится под вашим контролем, так как вы обычно должны стремиться к правильному цитированию при использовании «специальных» символов в строках.

4

Другие решения


По вопросам рекламы [email protected]