을 bool로하는 부울 문자열 QVarient 변환하지 :QML 엔진은 암시 적으로 내가 QML에서 액세스를 위해 다음과 같은 방법을 제공 QSettings 주위에 설정 클래스 래퍼 만든 재산
Q_INVOKABLE void setValue(Key key, const QVariant &newValue);
Q_INVOKABLE QVariant value(Key key);
사용자 인터페이스를 체크 상자가 있습니다 (미세하다) "true"또는 "false"로 QString 유형으로 QVariant에 부울 값을
CheckBox {
checked: Settings.value(Settings.KeySomeBoolSettings)
}
QSettings로드 : 다음과 같이 인스턴스. 문제는 QML이 이것을 암시 적으로 checked 속성에서 필요에 따라 부울 식으로 변환하고 항상 true로 변환하는 것입니다 (실제로 "false"인 경우에도 마찬가지입니다). Settings :: value()의 QVariant가 실제로 부울임을 감지 할 수있는 해결 방법을 발견했습니다. 검출 된 경우, 실제 QVariant 반환
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은 (value.toBool())로 실제로 BOOL 내부 형식을 일으키는 것이다. 따라서 내부 유형이 부울이면 QML은 암시 적 변환을 올바르게 만들 수 있습니다. 내가 말할 수있는 바에 따르면, QML은 문자열을 문자 그대로 취한 다음, 문자열이 비어 있지 않으면 항상 참인 부울로 변환합니다. 이것은 버그입니까, 아니면 제가 잘못하고있는 것입니까?
주위 래퍼의 Qt Labs Settings QML Type를 사용할 수 있습니까? 사실인가 거짓인가? OK, Not OK? 맞거나 틀린가요? 하나 또는 제로? 1 또는 0? 너무 많은 문자열 변형이있을 수 있습니다. – lpapp
좋은 지적. 어떤 이유로 나는 QML 엔진이 bool-string을 bool로 변환하여 Javascript로 넘겨주기를 기대했습니다. 하지만 실제로는 의미가 없으며 실제로는 모호합니다. –