在运行时更改QML控件的样式



我想在运行时将QML控件的样式从"材质"更改为"通用"(不是只是将"材质浅色"切换为"材质深色"(。规范的方法是什么?应如何为此编写QML文件?我的意思是我知道QQuickStyle::setStyle;我不明白我应该使用哪些控件以及如何处理它们。

UPD据我所知,在运行时更改设计风格的唯一方法是更改所有元素的所有参数。

这可能不是你想要的答案,但QQuickStyle的文档中说:

注意:在加载导入Qt的QML之前,必须配置样式快速控制2。QML之后无法更改样式类型已注册。

这是可能的,但只有在"破坏性的";方式:

不可能动态更改样式,因为QQC2样式是基于QML类型注册时间文件的选择,但是可以:

  • 卸载所有QML
  • 销毁任何现有的QQmlEngine实例
  • 调用qmlClearTypeRegistrations((
  • 调用QQuickStyle::setStyle((
  • 然后重新加载QML内容,使得QQC2类型被重新注册为新样式

这个过程应该在QQuickStyle中清楚地记录下来。更可取地应提供一个使用QML设置来保留例如UI的状态。

重要的是要强调qmlClearTypeRegistrations((文档:

当QQmlEngine存在或行为将未定义。调用之前必须删除任何现有的QQmlEngines这个功能。此函数只影响应用程序全局隐藏物删除QQmlEngine以清除与此相关的所有缓存数据发动机

QTBUG-68567:记录如何在运行时更改的样式

自动测试使用这种方法来运行每种内置样式的一系列测试,而不需要为每种样式指定一个唯一的应用程序/项目。例如:

https://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/tests/auto/shared/qtest_quickcontrols.h#n54

最新更新