gpt4 book ai didi

c++ - QML 引擎没有隐式地将 bool-string QVarient 转换为 bool 属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:51:43 25 4
gpt4 key购买 nike

我已经围绕 QSettings 创建了一个 Settings 类包装器,它提供了以下 QML 中的访问方法:

Q_INVOKABLE void setValue(Key key, const QVariant &newValue);
Q_INVOKABLE QVariant value(Key key);

在用户界面中,有如下所示的 CheckBox 实例:

CheckBox {
checked: Settings.value(Settings.KeySomeBoolSettings)
}

QSettings 将 bool 值作为 QString 类型加载到 QVariant 中,作为“true”或“false”(这很好)。问题是,当 QML 根据检查的属性的需要将其隐式转换为 bool 表达式时,它总是转换为 true(即使它实际上是“false”)。我找到了一个变通方法来检测 Settings::value() 中的 QVariant 实际上是 bool 值。

QVariant Settings::value(Key key)
{
QVariant value = mSettings->value(stringNameForKey(key), mDefaultValues[key]);

//this block is the workaround
if (QString(value.typeName()) == "QString" &&
(value.toString() == "false" || value.toString() == "true"))
return QVariant(value.toBool());

return value;
}

检测到时,返回的实际 QVariant 是 QVariant(value.toBool()),这导致内部类型实际上是 bool。所以当内部类型是 bool 时,QML 可以很好地进行隐式转换。据我所知,QML 将 varient 按字面意思作为字符串,然后将其转换为 bool 值,除非字符串为空,否则该值始终为真。这是一个错误,还是我做错了什么?

最佳答案

ECMAScript language specification 中所述,转换为 bool 值返回 false,如果值为 +0、-0、null、false、NaN、undefined 或空字符串。所有其他值,包括任何对象或字符串“false”,都转换为 true

此外,在 QML 中,您可以使用 Qt Labs Settings QML Type而不是包装 QSettings

关于c++ - QML 引擎没有隐式地将 bool-string QVarient 转换为 bool 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27455575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com