没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:鲍佳佳|2020-09-24 10:33:42.777|阅读 763 次
概述:本教程演示了如何使用自动生成的中间件API扩展QML应用程序。我们使用现有的QML Instrument Cluster应用程序并继续执行以下步骤:集成没有后端的基本接口;扩展界面并添加注释;添加模拟后端和相应的模拟注释;使用QML插件;添加自定义模拟行为;添加拟服务器并从Qt远程对象后端使用它;开发连接到DBus接口的生产后端。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt最新试用版吧>>
逐步演示如何基于QML应用程序生成中间件API。
本教程演示了如何使用自动生成的中间件API扩展QML应用程序。我们使用现有的QML Instrument Cluster应用程序并继续执行以下步骤:
在开始实际的中间件集成之前,让我们看一下现有的Instrument Cluster QML代码及其支持的所有功能:
接下来,我们使用中间件API添加对以下功能的支持:
最终目标是将所有这些功能连接在一起,在如下模拟进行实时驾驶体验:
第1章:使用IVI Generator的基本Middlware API
在本章中,我们将中间件API集成到现有的Instrument Cluster QML代码中。在大多数基本的QML示例中,我们不会自己手动编写这些部分,而是使用IVI Generator自动生成所需的部分。
接口定义语言为了能够自动生成中间件API,IVI Generator需要一些有关生成内容的输入。此输入以接口定义语言(IDL)QFace的形式给出,它以非常简单的方式描述了API。
现在我们将开始定义一个非常简单的接口,为我们提供speed属性:
module Example.IVI.InstrumentCluster 1.0 interface InstrumentCluster { int speed; }
首先,我们需要定义我们要描述的模块。该模块充当名称空间,因为IDL文件可以包含多个接口。
module Example.IVI.InstrumentCluster 1.0
该模块最重要的部分是其接口定义。
interface InstrumentCluster { int speed; }
在这种情况下,我们定义了一个InstrumentCluster由一个属性组成的接口。每个属性定义必须至少包含一个类型和一个名称。大多数基本类型是内置的,可以在QFace IDL语法中找到。
自动生成现在我们的IDL文件的第一个版本已经准备好了,是时候使用IVI Generator工具从中自动生成API了。与moc相似,此自动生成过程已集成到qmake Build System中,并在编译时完成。
在以下.pro文件中,我们基于IDL文件构建一个C ++库:
TARGET = $$qtLibraryTarget(QtIviInstrumentCluster) TEMPLATE = lib DESTDIR = .. QT += ivicore ivicore-private qml quick DEFINES += QT_BUILD_EXAMPLE_IVI_INSTRUMENTCLUSTER_LIB CONFIG += ivigenerator QFACE_SOURCES = ../instrument-cluster.qface
该.pro文件的大部分是一个标准设置,用于定义一个C ++库,使用“ lib” TEMPLATE并在TARGET变量中定义所需的文件名。对于qtLibraryTarget提供调试信息的库,我们使用的功能有助于在文件名上正确附加“ d”后缀。将来,我们需要链接此文件,因此我们将设置DESTDIR为上层目录以简化此过程。
注意: Windows会自动在同一目录中搜索库。
激活IVI Generator集成需要CONFIG变量指定ivigenerator选项。这可确保在指定的QFACE_SOURCES中使用QFace文件在构建过程中调用IVI Generator 。
为了确保我们构建的库可以在Windows上运行,添加QT_BUILD_EXAMPLE_IVI_INSTRUMENTCLUSTER_LIB到DEFINES变量中很重要。这样,在构建库时将导出所有符号,但在链接它时将导入所有符号。
自动生成哪些文件IVI Generator基于生成模板工作。这些模板定义应从QFace文件生成什么内容。如果QFACE_FORMAT未定义,则自动默认为“前端”模板。有关这些模板的更多详细信息,请参见使用生成器。
简而言之,“前端”模板会生成:
要检查C ++代码,可以在库的build文件夹中查看这些文件。
现在,对我们来说最重要的自动生成的文件是所定义接口的结果C ++类。
/**************************************************************************** ** Generated from 'Example.IVI.InstrumentCluster.qface' ** ** Created by: The QFace generator (QtAS 5.15.0) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #ifndef INSTRUMENTCLUSTER_INSTRUMENTCLUSTER_H_ #define INSTRUMENTCLUSTER_INSTRUMENTCLUSTER_H_ #include "instrumentclustermodule.h" #include <QtIviCore/QIviAbstractFeature> #include <QtIviCore/QIviPendingReply> #include <QtIviCore/QIviPagingModel> class InstrumentClusterPrivate; class InstrumentClusterBackendInterface; class Q_EXAMPLE_IVI_INSTRUMENTCLUSTER_EXPORT InstrumentCluster : public QIviAbstractFeature { Q_OBJECT Q_PROPERTY(int speed READ speed WRITE setSpeed NOTIFY speedChanged) public: explicit InstrumentCluster(QObject *parent = nullptr); ~InstrumentCluster(); static void registerQmlTypes(const QString& uri, int majorVersion=1, int minorVersion=0); int speed() const; public Q_SLOTS: void setSpeed(int speed); Q_SIGNALS: void speedChanged(int speed); protected: InstrumentClusterBackendInterface *instrumentclusterBackend() const; void connectToServiceObject(QIviServiceObject *service) Q_DECL_OVERRIDE; void clearServiceObject() Q_DECL_OVERRIDE; private: Q_PRIVATE_SLOT(d_func(), void onSpeedChanged(int speed)) Q_DECLARE_PRIVATE(InstrumentCluster) }; #endif // INSTRUMENTCLUSTER_INSTRUMENTCLUSTER_H_
如您所见,自动生成的C ++类实现了我们先前在QFace文件中定义的speed属性。通过使用Q_OBJECT和Q_PROPERTY宏,该类现在可以直接在您的QML代码中使用。
将前端库与QML代码集成对于此集成,我们使用QML代码中自动生成的前端库。为了简单起见,我们遵循标准的Qt示例模式,并使用一个小的C ++ main函数,该函数将我们自动生成的类注册到QML中并将Instrument Cluster QML代码加载到QQmlApplicationEngine中:
#include "instrumentclustermodule.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; InstrumentClusterModule::registerQmlTypes(); engine.load(QUrl(QStringLiteral("qrc:///Cluster.qml"))); return app.exec(); }
现在,我们需要的是InstrumentCluster QML元素的实际集成并将该speed属性连接到leftDial。这是通过首先使用instrumentClusterID 实例化元素来完成的。
import QtQuick 2.1 import QtQuick.Window 2.2 import Example.IVI.InstrumentCluster 1.0 Window { id: root width: 1920 height: 720 title: qsTr("QtIVI Instrument Cluster Chapter 1") visible: true color: "#0c0c0c" InstrumentCluster { id: instrumentCluster }
最后,我们可以为LeftDial项的value属性创建一个绑定到InstrumentCluster API的speed属性。
LeftDial { id: leftDial anchors.left: parent.left anchors.leftMargin: 0.1 * width value: instrumentCluster.speed }
未完待续。。。。。。。
本篇文章中的内容你都学会了吗?如果这篇文章没能满足你的需求、点击获取更多文章教程!现在立刻下载Qt免费试用吧!更多Qt类开发工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在线订购现直降1000元,欢迎咨询慧都获取更多优惠>>
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@wqylolg.cn
文章转载自:FastReport .NET 的主要功能之一是能够将多份报告合并为一份。当您需要合并来自不同来源的数据或以更方便的格式呈现信息时,此功能非常有用。在本文中,我们将讨论如何在 FastReport .NET 中将多份报告合并为一份。
本文将手把手教你如何用VMProtect对这一关键函数进行虚拟化保护,大幅提升代码安全性,让逆向工程攻击者无从下手!
在 PDF 文档中添加页眉和页脚有助于保持一致的版式和专业的外观。本文将介绍如何使用 Spire.PDF for Java,通过 Java 在现有的 PDF 文档中添加页眉和页脚,并提供详细的步骤和代码示例。
对于开发人员来说,由于自动化和定制化,通常首选使用编程方法来去除 PDF 中的水印。Aspose.PDF 提供可靠且可定制的解决方案,可无缝集成到各种应用程序中,确保准确性并保持文档完整性。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@wqylolg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢