用于嵌入式设备的 Qt Quick 控件 2.0

Posted

技术标签:

【中文标题】用于嵌入式设备的 Qt Quick 控件 2.0【英文标题】:Qt Quick controls 2.0 for embedded device 【发布时间】:2017-06-08 09:15:38 【问题描述】:

我的长期目标是为嵌入式设备开发 HCI,我说的是嵌入式,而不是手机设备。

我已经在 Qt Widgets 上工作了一个月,出于某些原因避免使用 Qt Quick(我担心 QML 代码没有优化),但昨天我看了这个视频:Youtube 演讲者最后说:“如果你现在正在制作嵌入式产品,请使用 Qt Quick,尤其是现在在 5.8 中。没有理由不使用 Qt Quick”

但相反,他解释说,对于嵌入式设备,我们应该使用 c++ 代码,而不是 javascript

我不太明白,这是否意味着我必须在 c++ 代码中创建所有对象并使用 Qt Quick 创建我的架构?

我真的不明白 Qt 想要我们做什么。只是沟通,因为他们不想优化旧的和稳定的 Qt 小部件,还是 Qt Quick 真的是嵌入式设备的解决方案?

我个人认为 Qt 不是嵌入式设备的解决方案,因为它们不断发展,不断变化的策略,而且似乎不知道自己将走向何方。

对于这个非算法问题,我深表歉意,并感谢您的所有回答。

【问题讨论】:

【参考方案1】:

我不能说出开发者的意图,也不能代表其他开发者。作为一名已经设计嵌入式设备 40 年的开发人员,我只能说我所理解的内容(对不起,我是个废话)。

C++ 还是 JavaScript?我觉得这个问题与你是否使用 QtQuick 没有太大关系。当然,您可以在 QML 代码中嵌入一些 JaveScript(有限制),但您也可以在相同的代码库中使用 C++(只是不嵌入在 QML 中)。然后是 Python。 Qt 和 QtQuick 都是编程框架,并且在某种程度上与语言无关。

我的观点是,QtQuick 是一种创建用户界面代码的良好、可移植的方式。在我目前的项目(多轴工业伺服控制系统)中,我使用 QML 作为用户界面(在需要的地方使用一点 JavaScript),C++ 用于大部分更高级别的处理(如网络控制和数据流) , C 和低级汇编语言(在 uC 和 DSP 中执行的那些例程)。在我看来,QML 和 C++ 很好地结合在一起。

【讨论】:

作为嵌入式设备的经验丰富的设计师,我猜你以前的一些应用程序 Flash 使用过?我尝试比较设计部分的两个“框架”(目前仅适用于此)。由于我对 Qt 的专家评估(非常)低,您的评论鼓励我在研究中走得更远。谢谢 我以前没有使用过 Flash 作为用户界面,因为我从未使用过 HTTP 进行通信。直到 90 年代,用户界面只是简单的按钮,有时是基于字符的 LCD。然后,由于需要更复杂的 UI,我添加了可编程终端或将 C# 与 Visual Studio 结合使用。过去几年我一直在使用 Qt。【参考方案2】:

我相信演讲者的想法是,您的大部分业务逻辑(如果不是全部)都应该使用 C++ 模型后端来完成。但是,可以使用嵌入的 JavaScript 在 QML 中完成所有逻辑,因为 JS 是一种解释性语言,它在运行时的性能可能低于编译的 C++ 代码(取决于 C++ 的编写情况)。

基本上您只想使用 JS 来操作图形组件,同时使用带有 QObject 模型的 C++ 来更新 QtQuick 元素的各个属性。

Qt Quick Best Practices wiki 中提到了这一点, https://wiki.qt.io/Qt_Quick_Best_Practices

【讨论】:

以上是关于用于嵌入式设备的 Qt Quick 控件 2.0的主要内容,如果未能解决你的问题,请参考以下文章

QT Quick Application Window 嵌入 C++ 对象

使用Q5.14.2开发Qt Quick开图形用户界面入门示例

组织孩子的 Qt Quick2 自定义控件

Qt Quick

Qt Quick——QML基础:自定义控件

Qt - Quick控件配置文件(qtquickcontrols2.conf)