You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QSettings调用beginReadArray()读取结果始终为空,求解决方案

解决QSettings读取ini配置块时beginReadArray返回size为0的问题

嘿,我来帮你搞定这个问题!你遇到的size始终为0的问题,根源是用错了API——beginReadArray()是专门用来读取数组格式的配置项的(比如colors[0] = "#ffffff"这种带索引的结构),而你的[colordefs]块里的是普通键值对,完全不是数组结构,所以它自然返回0啦。

正确的解决方案:动态读取键值对

我们可以通过遍历配置组下的所有子键来动态读取[colordefs]里的所有颜色定义,用映射表存储后,再处理[colors]块时直接替换即可。

第一步:读取[colordefs]的所有颜色定义

QSettings settings("你的配置文件路径.ini", QSettings::IniFormat);
QMap<QString, QString> colorDefMap;

// 进入colordefs配置组
settings.beginGroup("colordefs");
// 获取该组下的所有子键(也就是所有colors/xxx条目)
QStringList colorDefKeys = settings.childKeys();
for (const QString& key : colorDefKeys) {
    // 读取值并清理掉引号和分号(匹配你的ini格式)
    QString colorValue = settings.value(key).toString().remove(QRegExp("[\";]"));
    colorDefMap[key] = colorValue;
}
settings.endGroup();

第二步:处理[colors]块,替换颜色名称为对应色值

QMap<QString, QString> finalColorConfig;

// 进入colors配置组
settings.beginGroup("colors");
QStringList colorConfigKeys = settings.childKeys();
for (const QString& key : colorConfigKeys) {
    // 获取颜色名称(比如"mint")并清理格式
    QString colorName = settings.value(key).toString().remove(QRegExp("[\";]"));
    // 从映射表中获取对应色值,找不到则用默认值(这里设为黑色)
    QString finalColor = colorDefMap.value(colorName, "#000000");
    finalColorConfig[key] = finalColor;
}
settings.endGroup();

为什么你的原代码无效?

你的原代码里,在"colordefs"组内调用beginReadArray("colors"),是在找名为colors的数组结构,但你的[colordefs]里根本没有数组——所有条目都是colors/white这种独立键,所以beginReadArray找不到对应数组,返回size=0是完全正常的。

内容的提问来源于stack exchange,提问作者user2377283

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:40:52