【问题标题】:QTSettings beginReadArray() allways emptyQT 设置 beginRead Array() 始终为空
【发布时间】:2023-01-25 05:56:19
【问题描述】:

使用 beginReadArray() 应该可以动态地从 ini 文件中读取一个块。

我想动态读取块 [colordefs] 中的条目,因为可以有任意数量的颜色定义。

块 [colors] 具有固定长度。读取这些值时,颜色名称应替换为 [colordefs] 中的颜色值。

[colordefs]
colors/white = "#ffffff";
colors/grey = "#c3c3c3";
colors/lightGrey = "#f0f0f0";
colors/darkGrey = "#a0a0a0";
colors/darkerGrey = "#808080";
colors/mint = "#30dccc";

[colors]
colors/security/passwordEnabled = "mint"
colors/security/passwordDisabled = "grey"
colors/display/backgroundDefault = "white"
colors/display/backgroundHeader = "grey"
colors/display/backgroundFooter = "grey"

我尝试了不同的例子,但我总是得到 0 的大小

settings->beginGroup("colordefs");
int size = settings->beginReadArray("colors");
for (int i = 0; i < size; ++i) {
    settings->setArrayIndex(i);
}
settings->endGroup();

任何的想法?

【问题讨论】:

  • 如果删除settings-&gt;beginGroup("colordefs"); 会怎样?
  • 始终相同,大小 = 0

标签: qt ini


【解决方案1】:

beginReadArray() 返回 0 因为您的设置文件中实际上没有数组。设置文件中的数组如下所示

[logins]
1password=123
1userName=test
2password=bar
2userName=foo
size=2

看看documentation。这些设置由以下 sn-p 生成。

QSettings settings("myapp.ini", QSettings::IniFormat);

struct Login
{
    QString userName;
    QString password;
};
QList<Login> logins = {{"test", "123"}, {"foo", "bar"}};

settings.beginWriteArray("logins");
for (int i = 0; i < logins.size(); ++i) {
    settings.setArrayIndex(i);
    settings.setValue("userName", logins.at(i).userName);
    settings.setValue("password", logins.at(i).password);
}
settings.endArray();

如果要获取所有密钥,可以使用以下代码。

QStringList keys = settings.allKeys();

for (const auto &k : keys)
    qDebug() << k;

在你的情况下哪个会给你

"colordefs/colors/darkGrey"
"colordefs/colors/darkerGrey"
"colordefs/colors/grey"
"colordefs/colors/lightGrey"
"colordefs/colors/mint"
"colordefs/colors/white"
"colors/colors/display/backgroundDefault"
"colors/colors/display/backgroundFooter"
"colors/colors/display/backgroundHeader"
"colors/colors/security/passwordDisabled"
"colors/colors/security/passwordEnabled"

有了密钥,您就可以使用 value() 获取密钥背后的值。

您还可以通过使用获取特定组的所有密钥

settings.beginGroup("colordefs");
QStringList keys = settings.allKeys();
for (const auto &k : keys)
    qDebug() << k;
settings.endGroup();

在你的情况下哪个会给你

"colors/darkGrey"
"colors/darkerGrey"
"colors/grey"
"colors/lightGrey"
"colors/mint"
"colors/white"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多