这是一个不好的做法:将QML嵌入QT可停靠的小部件应用程序中



QT 小部件在 UI 开发方面非常耗时,我的 CSS 工作表已经有 3000 行代码,并且进行 UI 更改非常耗时。我的应用程序在性能方面要求很高,我正在考虑将小部件嵌入到 QML 中以更轻松、更快速地控制 UI,但我真的很担心性能,值得一试还是只是不好的做法?

我的应用程序在性能方面非常苛刻,我是 考虑将小部件嵌入到 QML 中,以便更轻松、更快捷 控制UI,但我真的很担心性能,值得 尝试还是只是不好的做法?

从Qt 5.1开始,我们可以轻松地将QML视图嵌入到Qt Widget容器中。前段时间我偶然发现了一个博客:将Qt Widgets和QML与QWidget::createWindowContainer()相结合。

至于性能,不确定您的应用程序需要什么样的性能?整体QML通过OpenGL或非常快速地渲染到屏幕。另一方面,对于QML,您经常需要处理JavaScript,这当然无法与C++相提并论。不过,商业Qt引入了Qt快速编译器。

至于基于QWidget的UI与QML:讨论可以被认为是意见的表达等。然后一些考虑点:

  • 开发和维护一种基于小部件或QML的UI更容易。
  • 混合 UI 是可能的,但了解您可以从中获得什么是有意义的。
  • 大多数桌面应用程序仅对小部件完全满意。
  • 当应用程序也应该移植到移动平台时,QML更有意义。
  • 当应用程序应该依赖于"触摸"时,QML也比小部件更有益。

QT 小部件在 UI 开发方面非常耗时,我的 CSS 工作表已经有 3000 行代码,现在是时候了 使用来执行 UI 更改。

嗯......非常风格化的基于小部件的应用程序?我只能确定这两个概念:widget 和 QML 非常不同,但 widget 样式表和 QML 都是声明性语言,尽管不同。我也确信任何严肃的应用程序都需要更多的C++,而使用 QML,我们需要花时间将C++代码与 QML 桥接起来。

QML应用程序的分发也可能比纯粹基于小部件的要复杂一些:例如,您需要自定义Qt构建以支持针对某些VM和平台模拟的OpenGL:这是一个有趣的话题。此外,对于Qt Quick小部件,您应该将它们放入与应用程序一起分发的资源中,或者您需要Qt快速编译器。如果您使用它,请确保所有 QML 代码都是由它编译的,并且应用程序的任何部分仍然使用资源中缺少的"脚本化"QML。我在我们的应用程序中使用了Qt 5.5快速编译器,不仅发现了很多错误,而且还需要将某些Qt Quick文件与应用程序安装包一起从框架中拖出。使用标准动态链接和windeployqt工具,这还不错。但是一个严肃的应用程序通常需要与其所有依赖项静态链接,然后我们就无法使用windeployqt工具。

总体而言,Qt正在从小部件转向QML,但是我们可以获得什么以及我们在实际应用程序中需要多少QML是一个漫长的讨论。

最新更新