从组合框值 qml 动态更改样式
Dynamic change of style from combobox value qml
大家好,我已经做了我自己的风格,然后把它添加到qml.qrc
然后我在main.cpp
中调用它:
engine.addImportPath("qrc:/Styles");
QQuickStyle::setStyle(Modern style);
一切正常,但我必须使其从 C++ 代码动态更改,并从 combobox
中获取值
我尝试添加:
char str1[] = "Basic";
engine.rootContext()->setContextProperty("styling", *str1);
QQuickStyle::setStyle(str1);
像这样它不会实时变化,也许有人帮助我,谢谢。
P.S.: 我需要动态更改应用程序的样式,这取决于 comboBox
).
中所选值的值
我找到了解决方案:
无法即时更改样式,因为 QQC2 样式基于 QML 类型注册时间文件选择,但可以:
卸载所有 QML,
销毁任何现有的 QQmlEngine 实例,
调用 qmlClearTypeRegistrations(),
调用 QQuickStyle::setStyle(),
然后重新加载 QML 内容,以便使用新样式重新注册 QQC2 类型。
这个过程应该清楚地记录在 QQuickStyle 中。最好提供一个示例,该示例使用 QML 设置来保留 UI 的状态,例如
重要的是要强调 qmlClearTypeRegistrations() 文档中的警告:
当 QQmlEngine 存在时不要调用此函数,否则行为将是未定义的。在调用此函数之前,必须删除任何现有的 QQmlEngine。此功能仅影响应用程序全局缓存。删除 QQmlEngine 以清除与该引擎相关的所有缓存数据。
大家好,我已经做了我自己的风格,然后把它添加到qml.qrc
然后我在main.cpp
中调用它:
engine.addImportPath("qrc:/Styles");
QQuickStyle::setStyle(Modern style);
一切正常,但我必须使其从 C++ 代码动态更改,并从 combobox
我尝试添加:
char str1[] = "Basic";
engine.rootContext()->setContextProperty("styling", *str1);
QQuickStyle::setStyle(str1);
像这样它不会实时变化,也许有人帮助我,谢谢。
P.S.: 我需要动态更改应用程序的样式,这取决于 comboBox
).
我找到了解决方案: 无法即时更改样式,因为 QQC2 样式基于 QML 类型注册时间文件选择,但可以:
卸载所有 QML, 销毁任何现有的 QQmlEngine 实例, 调用 qmlClearTypeRegistrations(), 调用 QQuickStyle::setStyle(), 然后重新加载 QML 内容,以便使用新样式重新注册 QQC2 类型。 这个过程应该清楚地记录在 QQuickStyle 中。最好提供一个示例,该示例使用 QML 设置来保留 UI 的状态,例如
重要的是要强调 qmlClearTypeRegistrations() 文档中的警告:
当 QQmlEngine 存在时不要调用此函数,否则行为将是未定义的。在调用此函数之前,必须删除任何现有的 QQmlEngine。此功能仅影响应用程序全局缓存。删除 QQmlEngine 以清除与该引擎相关的所有缓存数据。