从组合框值 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 以清除与该引擎相关的所有缓存数据。