提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|实施案例|编辑:鲍佳佳|2020-09-18 12:21:29.850|阅读 671 次
概述:此示例包含一个系统UI和三个示例应用程序,总共产生了四个单独的QML应用程序。每个应用程序都放置在其自己的单独目录中。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
Qt(发音为“ cute”,而不是“ cu-tee”)是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt最新试用版吧>>
通过Intent进行通信的三个应用程序和一个系统UI。
此示例包含一个系统UI和三个示例应用程序(“Red Intents”,“Green Intents”和“Blue Intents”),总共产生了四个单独的QML应用程序。
每个应用程序都放置在其自己的单独目录中,如下所述。由于所有应用程序和系统UI都使用基于QtQuickControls 2的UI,因此其组件位于共享目录中。
运行示例
假设appman可执行文件在您的路径中,则可以按以下方式运行系统UI:
examples/applicationmanager/intents$ appman --builtin-apps-manifest-dir ./apps system-ui.qml
添加-o "ui: { style: material }"将使示例的外观更好看。
如下图所示:
有关这些和其他命令行选项的信息,您可以运行appman --help或查看配置文档。
应用实施
所有应用程序(红色,绿色和蓝色)都是相同的,它们main.qml只是实例化共享的IntentsApplicationWindow组件。
import "../../shared" "../../shared" IntentsApplicationWindow { }{ }
IntentsApplicationWindow组件其UI内容是通过实例化该IntentsUIPage组件来定义的,该组件也可以共享。这个UI组件没有任何特定于意图的代码,因此实际的发送是在附加到IntentsUIPage请求信号的信号处理程序中完成的:
onRequest: { { var request = var request = IntentClient.sendIntentRequest(intentId, applicationId, parameters) request.onReplyReceived.connect(function() { { intentPage.setResult(request.requestId, request.succeeded, request.succeeded ? ? request.result : : request.errorMessage) })}) }}
在使用在UI中选择的参数调用IntentClient :: sendIntentRequest之后,示例代码会将函数对象连接到请求的ReplyReceived信号。结果放置在UI 的“ request”字段中。
另外,它为应用程序定义了所有必需的IntentHandlers,例如:
IntentHandler { { intentIds: "rotate-window" onRequestReceived: { { rotationAnimation.start() request.sendReply({ "done": "done": true })}) }} }}
这些intent处理程序并不复杂,每个intent处理程序仅触发一个也在此文件中定义的基本动画,因此对于rotate-window意图而言,如下:
RotationAnimation on on rotation { { id: rotationAnimation running: false duration: 500; from: 0; to: 360 }}
在QML中,仅实现IntentHandlers是不够的,因为应用程序管理器需要了解有关哪个应用程序支持哪些意图的信息。在应用程序运行之前,此信息必须对应用程序管理器可用,以便于根据intent请求自动启动应用程序。对于应用程序管理器中的所有其他应用程序配置,这都是通过应用程序的清单文件完成的info.yaml:
将红色应用定义了三个可用的intent:
intents:: - id: rotate-window- id: rotate-window name:: en: Rotate Red: Rotate Red - id: scale-window- id: scale-window name:: en: Scale Red: Scale Red - id: blink-window- id: blink-window name:: en: Blink Red: Blink Red
此外,红色应用程序获得了该call-blue功能,这是蓝色应用程序中某些intent所必需的。
capabilities: 'call-blue': 'call-blue'
绿色应用程序定义只有两个可用的意图。需要注意的是,即使该应用程序有一个IntentHandler的blink-window intents通过共享IntentsApplicationWindow组件,此处理程序不会被调用,因为这个intents ID没有通过info.yaml清单在系统中注册:
intents:: - id: rotate-window- id: rotate-window name:: en: Rotate Green: Rotate Green - id: scale-window- id: scale-window name:: en: Scale Green: Scale Green
蓝应用程序最复杂的intents定义。除了处理与Red应用程序相同的三个blue-window-privateIntent之外,它还注册具有属性的Intent visibility: private。只能从注册它们的同一应用程序中请求私有意图,因此在这种情况下,只有Blue可以成功请求该blue-window-private意图。此外,rotate-window仅具有此call-blue功能的应用程序可以请求该意图:此处,红色应用程序具有所需的功能,而绿色应用程序则没有。
intents:: - id: rotate-window- id: rotate-window name:: en: Rotate Blue: Rotate Blue requiredCapabilities: [ 'call-blue' ]: [ 'call-blue' ] - id: scale-window- id: scale-window name:: en: Scale Blue: Scale Blue - id: blink-window- id: blink-window name:: en: Blink Blue: Blink Blue - id: blue-window-private- id: blue-window-private name:: en: Blue Private Intent: Blue Private Intent visibility: private: private系统用户界面实现
除了用于启动和停止应用程序的左侧栏之外,系统界面还具有两个用于处理意图机制的特殊功能:
在系统界面中处理intent
intents不仅可以在应用程序中处理,而且可以在系统UI中处理。由于系统UI始终在运行,因此我们不需要依赖info.yaml清单文件来定义支持的intents,而是可以直接将所需的元数据声明为IntentServerHandler组件的属性。该IntentServerHandler实际上是源自IntentHandler,所以它的工作方式为应用端计数器部分相同的:它只会用所需的属性来定义所有元数据(例如names,icon...)。
IntentServerHandler { { intentIds: "rotate-window" names: { "en": { "en": "Rotate System UI" } } visibility: IntentObject.Public onRequestReceived: { { rotationAnimation.start() request.sendReply({ "wasRequestedBy": "wasRequestedBy": request.requestingApplicationId })}) }} }}
处理程序回调与应用程序中的回调几乎相同。这里唯一值得注意的区别是,我们可以访问requestingApplicationId来标识请求的来源。出于安全原因,该数据不适用于应用程序中的intents处理程序。
消除意图请求的歧义该示例实现了一个UI,使用户可以选择如何消除传入的intents请求的歧义。在此处完成IntentServer的消歧请求的注册:
Connections { { target: IntentServer function onDisambiguationRequest(requestId, potentialIntents) { requestId, potentialIntents) { disambiguationDialog.add(requestId, potentialIntents) }} }}
由于我们希望在系统中并行intents请求的数量方面保持灵活性,因此我们仅将传入请求添加到队列(allRequests)中。将Dialog消耗该队列是一个相当标准的QtQuickControls 2对话框,让你展示你的应用程序可能选择从IntentServer :: disambiguationRequested()信号来一个漂亮的UI。在按下Ok或Cancel之后,对话框将通知IntentServer用户选择:
onAccepted: { { IntentServer.acknowledgeDisambiguationRequest(currentRequest.requestId, currentRequest.intents[handlingApplications.currentIndex]); showNext() }} onRejected: { { IntentServer.rejectDisambiguationRequest(currentRequest.requestId) showNext() }}
本篇文章中的内容你都学会了吗?如果这篇文章没能满足你的需求、点击获取更多文章教程!现在立刻下载Qt免费试用吧!更多Qt类开发工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在线订购现直降1000元,欢迎咨询慧都获取更多优惠>>
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:TeeChart 为先进的数据集成和可视化工具 RivCross 提供了丰富的图表库,通过提供对水平定向钻井 (HDD) 操作至关重要的强大数据可视化功能增强了 RivCross。
灵犀文档通过嵌入 SpreadJS,文档系统完美复刻了 Excel 的UI架构,并有效提升了系统多人协作和数据处理效率。
GEOsens致力于研发“从传感器到互联网”的在线监测和控制系统,使用TeeChart超过15年,TeeChart 成为了GEOsens访问数据的关键元素,为决策提供了坚实的基础。
ActiveReports 报表降低系统与报表功能的耦合度,使系统的报表功能得以模块化;ActiveReports 报表本身的优良特性,也为系统打造更强的用户体验如虎添翼,如数据钻取、交叉报表、数据导出等。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢