2017-10-04 34 views
2

我正在开发一个使用Qt的C++应用程序。该应用程序显示一些使用QML制作的各种定制小部件。这些小部件使用信号/插槽系统呈现值。在q ++中使用qml管理图形用户界面

我想这可能是管理最好的办法:

  • 管理在QML文件,包括渲染和业务规则的一切。
  • 嵌入QML文件到了QWidget类(QQuickWidget),并在C管理渲染和业务规则++
+1

从未使用qml,我会虚心地建议C++ :) – jwilson

回答

2

取决于您的核心逻辑有多复杂。如果它小而简单,那么在QML中做。即使它不那么简单,使用QML也会带来很多好处,因为与C++相比,原型设计有很多,更快,更容易。你不必重新编译,你不会崩溃,但相当有用的错误信息。我发现QML的原型比C++快5到10倍。

如果您希望获得更好的性能或内存效率,并且它是无缝的即插即用转换,您可以随时将事物移至C++,因为您可以在两个世界中使用信号和插槽。在QML和C++端口中开发算法通常比从头开始的C++算法更快。缺点是你在低级别上有不同的工具集,在C++中你可以使用Qt的核心类,而在QML中,你将不得不使用JavaScript及其编程习惯用法。这实际上取决于你有多少经验,但通过一些练习,将QML翻译成C++是相当容易的。这就是说,即使你选择QML作为逻辑,将它作为一个独立于GUI的层也是一个不错的主意。

除非你需要QWidget作为别的东西,否则绝对没有理由使用QQuickWidget,因此你可以避免整个小部件模块作为依赖。您不需要小部件来在C++中执行核心逻辑。

3

当你想要得到的东西快速启动和运行做在QML的楼内设有商务逻辑是一个很好的路要走。但添加新功能时事情会变得复杂。过了一段时间,我们通过依赖QML文件中的信号插槽获得了很多级联回调。特别是在一个QML文件中混合视图和商业代码时会使代码难以维护。

为了避免这种情况,使用某种MVC或MVVM模式将buisness-logic与您的视图代码分离开来。当然,你可以在QML中做buissness逻辑。关注问题的分离有助于保持您的代码基础可以独立于您的编程语言。

如果您有任何关于使用C++的buisness-logic的性能问题,那么这是最好的方法(在QML中的第一个原型开始并需要将它移植到嵌入式平台时进行这些体验)。当然你也可以使用C++来处理一些特殊的QML元素。

所以它很大程度上取决于你的问题。