QSettings:是不是可以始终保存用双引号括起来的字符串?

Posted

技术标签:

【中文标题】QSettings:是不是可以始终保存用双引号括起来的字符串?【英文标题】:QSettings: is it possible to always save strings wrapped in double quotes?QSettings:是否可以始终保存用双引号括起来的字符串? 【发布时间】:2020-02-21 09:44:49 【问题描述】:

这是一个简单的测试:

QSettings *settings = new QSettings("test.ini", QSettings::IniFormat);

QStringList values;
values << "stringwith'quote"
       << "\"stringwithdoublequotes\""
       << "string"
       << "string with spaces"
       << "stringwith\nnewline"
       << "stringwith,comma"
       << "stringwith;semicolon"
       << ";"
       << ","
       << "'"
       << "',";

for (int i=0; i<values.count(); i++)
    settings->setValue("value" + QString::number(i), values[i]);

这是 .ini 的样子:

[General]
value0=stringwith'quote
value1=\"stringwithdoublequotes\"
value2=string
value3=string with spaces
value4=stringwith\nnewline
value5="stringwith,comma"
value6="stringwith;semicolon"
value7=";"
value8=","
value9='
value10="',"

是否可以强制将所有字符串保存在双引号中?

【问题讨论】:

【参考方案1】:

我认为你可以,但有点喜欢自己做。您可以创建一个方法来确保您的字符串被正确引用

QString quoted(QString word)

    return "\"" + word.replace('\\', "\\\\").replace('"',"\\\"").replace('\t', "\\t") + "\""

该方法添加引号,并转义一些特殊字符。 然后您可以在列表中的任何字符串上调用它。如果您要经常使用它,您可以从 QSetting 继承以覆盖方法 setValue 并使其自动化。

请注意,方法 QSettings::value 也需要一些修改才能取消引用。

【讨论】:

感谢您的回复。不幸的是,当settings-&gt;setValue 被调用时,字符串被保存为转义字符:value2=\"string\"

以上是关于QSettings:是不是可以始终保存用双引号括起来的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

(实用篇)PHP中单引号与双引号的区别分析

用双引号封装输出

QSettings():如何保存到当前工作目录

JSON的键究竟需要用双引号括起来吗

PHP中单引号与双引号的区别分析

json中可以放中文双引号吗