提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:鲍佳佳|2020-09-24 10:33:42.777|阅读 758 次
概述:本教程演示了如何使用自动生成的中间件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@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢