QSettings 无法正确处理包含斜杠的key
本文最后更新于:2024年6月22日 晚上
前情提要
um,这次长话短说好吧
在Qt
中,我们经常会用QSettings
来读写配置文件,注册表等
‘\‘:二义性
一般情况下没有什么问题,但是当key中包含反斜杠('\'
) or 斜杠( '/'
)的时候,就寄了
文档:不要在节名或键名中使用斜杠(“/”和“\”);反斜杠字符用于分隔子键(见下文)。在 Windows 上,“\”被 QSettings 转换为“/”,这使得它们相同
1 |
|
斜杠被用于分割子键,所以当key
本身含有斜杠时(如:"C:\App\test.exe"
in MuiCache
),QSettings
无法处理
- 可能被认为是分割符
- 或者被转换为
"C:/App/test.exe"
(我遇到了)(找了好久bug 哭)
(这其中的逻辑还没有非常搞清楚:为什么路径不会被认为是分割符 而是产生了一个"C:/App/test.exe"
这样的key
)
文档:
请注意,如前所述,
QSettings
使用反斜杠字符来分隔子项。因此,您无法读取或写入包含斜杠或反斜杠的Windows
注册表项;如果需要,您应该使用本机
Windows API
文档中说分割使用反斜杠('\'
),但是代码例子中用的是斜杠( '/'
),有点迷糊
总结:
- 分割子键使用:斜杠(
'/'
) key
中包含'\'
or'/'
(如 路径),就不要用QSettings
了,改用Windows API - RegOpenKeyEx
- 注意,我说的是
key
,notvalue
,值中包含斜杠没有问题
peace
Ref
QSettings 无法正确处理包含斜杠的key
https://mrbeancpp.github.io/2024/06/22/QSettings-无法正确处理包含斜杠的key/