使用c ++ app中的qml管理图形用户界面

时间:2017-10-04 15:14:53

标签: c++ qt qml

我正在使用Qt开发一个C ++应用程序。该应用程序显示使用QML制作的各种自定义小部件。这些小部件使用信号/插槽系统渲染值。

我想知道什么是最好的管理方式:

  • 管理qml文件中的所有内容,包括呈现和业务规则。
  • 将qml文件嵌入QWidget类(QQuickWidget)并使用c ++管理渲染和业务规则

2 个答案:

答案 0 :(得分:3)

如果你想快速完成并快速运行QML中的商务逻辑是一个很好的方法。但是在添加新功能时,事情会变得复杂。过了一会儿,我们通过依赖QML文件中的信号插槽获得了许多类似级联的回调。在一个QML文件中混合使用视图和商务代码时会很困难,这会使您的代码难以维护。

为了避免这种情况,使用某种MVC或MVVM模式将商业逻辑与视图代码分开。当然,您可以在QML中执行buissness-logic。关注点的分离有助于保持代码库的可理解性,使其独立于编程语言。

如果您对使用C ++的商务逻辑有任何性能问题,那么这是最好的方法(在QML中使用第一个原型开始并将其移植到嵌入式平台时获得这些体验)。当然,您也可以将C ++用于一些特殊的QML元素。

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

答案 1 :(得分:2)

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

如果你想要更好的性能或内存效率,你总是可以把事情转移到C ++上,而且它是一个无缝的即插即用转换,因为你可以在两个世界中使用信号和插槽。在QML和端口到C ++中开发算法通常比从头开始在C ++中开发算法更快。缺点是你在低级别有一个不同的工具集,在C ++中你可以使用Qt的核心类,而在QML中你必须使用JavaScript及其编程习惯用法。这取决于你对两者的经验有多少,但通过一些练习,将QML翻译成C ++非常容易。

话虽如此,即使您选择QML作为逻辑,将它作为与GUI分开的层始终是一个好主意。

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