基于Qt 的Android 指挥信息终端软件设计

2024-06-26 07:57汪清芳周飞虹
电脑知识与技术 2024年14期
关键词:编程语言跨平台

汪清芳 周飞虹

摘要:文章基于Qt on Android开发的设计思路,设计并实现了一款外贸指挥信息终端软件,主要功能包含主框架、信令交互、系统设置、数据指挥、话音、多媒体等。软件界面友好,操作简单,功能多样,解决了传统指挥信息终端软件功能有限、人机界面呆板、通信功能较弱、使用不便等问题。软件主要采用C/C++编程语言进行开发,对于C/C++开发人员来说,减少了学习新的开发语言所耗费的时间,极大地提高了开发效率。C/C++开发人员也可以高效地开发出Android应用程序。

关键词:Qt开发框架;Android应用程序;跨平台;信息终端;C/C++编程语言

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2024)14-0010-04 开放科学(资源服务)标识码(OSID) :

0 引言

信息终端是一种手持式设备,可用于移动地控制相关设施[1]。传统的信息终端软件大多基于WinCE等操作系统编译运行,软件支持的功能和使用界面较为简单,没有良好的用户体验感,难以满足日益增长的用户需求。近年来,Android操作系统崛起,并在智能设备的应用开发中占据了一定的市场[2]。由于其开发成本低、操作方便、易于推广等优势,备受开发者青睐[3-5]。因此,开发能够运行在Android操作系统上的指挥信息终端软件势在必行。

本文研究并设计了基于Qt的Android指挥信息终端软件,在保证软件基础功能(如数据指挥、话音、多媒体等)稳定的前提下,逐步优化基础功能,立志于打造一款基础通用的指挥信息终端软件。在此基础上,根据项目需求增加功能定制,将来可以更好地服务于外贸项目中各种通信终端。

1 功能描述

指挥信息终端软件功能主要由主框架、信令交互、多媒体、通信以及系统设置五大部分组成[6],软件组成图如图1所示。

1.1 主框架

主框架功能主要由界面逻辑处理、数据库、提示窗口等功能组成。

1) 界面逻辑处理:Android程序界面跳转和桌面应用程序跳转不同,桌面应用程序可以实现任意界面跳转,而Android程序跳转逻辑只能返回至上一个功能界面。

2) 数据库:使用SQLite作为软件数据库,并提供一套规范统一的操作接口,包含了增、删、改、查和事务回滚等功能。SQLite是一款小型轻量级的开源嵌入式数据库,占用资源低,处理速度快,具备体积小、性能高、可移植性强等特点[7]。

3) 提示窗口:提供默认提示窗口和自定义提示窗口两种风格样式的接口函数,可在不同场景中使用。默认窗口适合一些简单文本性的提示语,自定义窗口适合多属性、多元素信息提示。

1.2 信令交互

信令交互是指本软件与底层服务的信令交互功能,主要包括话音信令交互和自组网信令交互,支撑保障了话音呼叫服务功能和自组网设置功能的正常使用。话音信令包含了单呼、组呼、接听、挂断等信令;自组网信令包含了自组网状态查询、自组网设置和设置应答等信令。

1.3 多媒体

多媒体功能包含了拍照、录像、相册和视频播放等功能。由于QtMultimedia::Camera类拍照无法很好对焦,导致拍摄效果不佳,以及其他一些如获取视频帧等问题,软件最终采用Java原生方法,通过调用安卓系统功能函数,完成拍照、录像和视频播放等多媒体功能,然后通过Qt提供的JNI函数调用Java接口,很好地避免了Qt原生方法拍照性能不足的问题。

1.4 通信功能

通信功能主要由话音呼叫、数据指挥、船艇值班和报文记录等4个功能模块组成。话音呼叫包含了选呼、组呼等功能模块。数据指挥功能包含了航行请求、命令指示、请示报告和警示短语等8类通用短语。船艇值班功能完成了船艇甲板、轮机和电气三类船体设施运行情况每日登记上报功能。报文记录功能提供了指挥短语的收发记录功能,可查看指挥短语历史发送和接收记录。

1.5 系统设置

系统设置功能由基础设置和自组网设置组成。基础设置包含了通讯录设置、亮度设置、本级身份设置、上级身份设置和定位授时等功能。自组网设置包含了网号、信道号、节点号和节点总数等设置功能。

2 关键技术研究

2.1 开发环境构建

Qt 下配置Android 开发环境需要准备好JavaJDK,Android SDK,Android NDK,Android ant,Androidadb,支持安卓的Qt 版本,如qt-opensource-windowsx86-android-5.9.2。注意:环境安装时不能含有中文路径。

1) 安装Java JDK是编译Android程序必要的Java 开发环境,需要配置系统环境变量:

变量名:JAVA_HOME

变量值:C:\Program Files\Java\JDK1.8.0_144

变量名:CLASSPATH

变量值:% JAVA_HOME% \lib;\% JAVA_HOME%\lib\tools.jar

2) Android SDK 安装完毕后,把SDK 目录下platform-tools文件夹路径添加到系统环境变量后面:

变量名:PATH

变量值:C:\Program Files\Android\Android-SDK\platform-tools

3) Android NDK只需要安装,无须配置环境变量。

4) Android ant1.10.1 解压完毕后,将...\apacheant-1.10.1添加到系统环境变量中:

变量名:PATH

变量值:C: \Program Files\Android\ANT\apacheant-1.10.1\bin

5) Android adb(Android Debug Bridge 安卓调试桥):是Qt on Android开发时使用的调试工具,通过该工具可以直接操作管理Android模拟器或真实的An?droid设备(手机、平板等)。adb常用命令如下:

adb devices:查看当前连接设备,列出显示

adb root:重新启动adb,并获取管理权限

adb shell:进入Android Shell命令环境中

adb disconnect <设备名>:断开与指定设备的连接

adb install :将指定apk文件安装到设备上

adb uninstall –k:卸载软件,如果加-k保留配置和缓存文件

6) 打开Qt Creator,依次点击菜单“工具-选项-设备-Android”配置JDK、SDK、NDK、Ant 的安装路径。点击“Start AVD Manager”可创建AVD,方便之后的调试。

2.2 界面逻辑处理

在GUI开发时,复杂的界面跳转逻辑用程序实现特别费劲,本文给出的解决方案是利用Qt状态机机制。Qt状态机框架提供了一些类来创建执行状态图,状态图为一个系统如何对外界激励进行反应提供了一个图形化模型,该模型是通过定义一些系统可能进入的状态以及系统怎样从一个状态切换到另一个状态来实现的。用户界面设计中采用状态驱动,就可以根据当前状态的不同,显示不同的界面。

1) 调用准备:在pro文件中添加QT += SCML和包含头文件include ,来提供对Qt 状态机的支持。

2) 加载状态机文件:

QScxmlStateMachin*m_achine=QScxml ?StateMachine:: fromFile(QStringLiteral“( : resource/views?tate.scxml”));

3) 跳转目标页面和回退页面状态切换:

m_achine->submitEvent(QString strDestPagr);

m_achine->submitEvent“( goback”);

4) 状态变化槽函数:

void slotState()

{

QStringList S = m_achine->activeStateNames();

if(S.size()>0)

{

bool b = ui->stack->children.contains(p);

if(!b)

{

ui->stack->addWidget(p);

}

ui->stack->setCurrentWidget(p);

}}

2.3 SQLite 数据库

在Qt下实现SQLite封装调用,可以按照如下方法进行操作。

1) 调用准备:在pro文件中加入以下代码,来提供对SQLite数据库的支持,QT += sql。

2) 添加包含头文件:

include

include

include

include

include

include

3) 创建并打开数据库:

QSqlDatabase db = QSqlDatabase:: addDatabase“( QSQLITE”“, sqlite3”);

db. setDatabaseName“( /. database. db”);//数 据 库路径

db.open();

4) 建立数据库连接:

QSqlDatabase db = QSqlDatabase:: data?base“( sqlite3”);

QSqlQuery query(db);

2.4 JNI 技术

关于Qt for Android程序如何完成对Android(Java 方法)的调用,从而实现多平台的兼容主要是通过JNI 技术实现。解决方案是通过QAndroidJniEnvironment 类和QAndroidJniObject类,它们简化了对Java方法的应用。QAndroidJniEnvironment 类:实现JNI 的环境,用于异常的检查和清除等功能;QAndroidJniObject类用于调用Java方法。

1) 调用准备:在pro 文件中添加代码QT += an?droidextras,来提供对Android库的支持;

2) 调用方法:方法签名格式为(参数类型)返回类型。调用静态方法格式:QAndroidJniObject 对象名;对象名(方法名,方法签名,方法参数列表),如果没有参数,则方法签名和方法参数列表可以省略,程序会自动提供正确的签名。

2.5 多媒体实现

综合考虑开发效率以及本软件对于多媒体功能没有特殊需求,系统相机相对而言封装成熟、调用简单,拍照和录像清晰等因素,本文最终选择Android提供的系统相机API实现多媒体功能。下面展示一些实现拍照和录像功能需要配置的权限和核心代码。

1) 添加必需的权限:

2) 调用相机拍照核心代码:

Uri fileUri = Uri.fromFile(getOutputMediaFile());

Intent int = new Intent(MediaStore. ACTION_IMAGE_CAPTURE);

int.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);

startActivityForResult(int. RECORD_SYSTEM_CAPTURE);

3) 调用相机视频录制核心代码:

Uri fileUri = Uri.fromFile(getOutputMediaFile());

Intent int = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

int.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

int. putExtra(MediaStore. EXTRA_VIDEO_QUALITY,1);

int. putExtra(MediaStore. EXTRA_DURATION_LIMIT,10);

startActivityForResult(int, RECORD_SYSTEM_VIDEO);

3 软件优势和效果展示

3.1 软件优势

本软件优势主要体现在两个方面:一是软件界面展现;二是软件开发效率。

1) 软件界面展现:相比传统指挥终端软件,本软件界面功能更为丰富,界面显示效果大多采用图像化界面,显示效果更为简洁直观,操作也较为便利。

2) 软件开发效率:本软件开发语言主要是用C++ 代码编写实现的。由于Android原生开发具有学习难度大、移植性差等不足,在Android开发人员紧缺的实际情况下,C++软件设计人员可以使用Qt开发Android 程序,减少了学习Android原生语言耗费的时间,极大地提高了开发效率,有效地规避了项目的进度风险。此外,使用Qt开发的应用程序,源码支持跨平台,可移植性高,后续可根据项目使用需求移植到其他项目中投入使用,避免了从零开始开发所增加的工作量。

3.2 效果展示

程序安装运行在通导指挥信息终端的效果图如图2所示。

指挥信息终端软件主界面效果图如图3所示。

数据指挥功能短语种类界面效果图如图4所示。

4 结论

本文以Windows 环境下采用基于Qt C/C++框架开发Android应用程序的设计思路[8-9],设计实现了“基于Qt的Android指挥信息终端软件”。软件通过了严格的测试实验,从实验的效果看,该软件工作性能良好,运行稳定[10],目前软件已正式投入生产并交付外方使用。

在未来的工作中,将会从两方面进行改进:一是将继续寻找Qt On Android加载地图相关技术途径与手段,有望能够将地图相关的功能和操作集成至指挥通信终端;二是将继续对基础业务逻辑和人机交互方面的部分功能进行优化,使其更贴近软件实际应用场景和符合日常操作习惯。

参考文献:

[1] 刘剑波.突发公共卫生事件应急指挥系统嵌入式手持信息终端[D].成都:四川大学,2006.

[2] 廖列法,张幸平.基于Android的智能可视化指挥系统[J].计算机工程与设计,2022,43(9):2694-2701.

[3] 刘伟,李杰,杨雁宇.基于Android的便携式角度测量仪设计[J].电子器件,2017,40(4):1044-1048.

[4] 何东华.基于安卓的粮库信息查询系统[J].粮食储藏,2013,42(2):47-50.

[5] 李亚东,冯仲科,曹明兰,等.Android智能手机树高测量APP开发与试验[J].中南林业科技大学学报,2016,36(10):78-82.

[6] 曾浩炜,张骏骁,朱庆.基于北斗的应急测绘指挥终端设计和实现[J].地理信息世界,2016,23(4):81-83,89.

[7] 杨林楠,郜鲁涛,林尔升,等.基于Android系统手机的甜玉米病虫害智能诊断系统[J]. 农业工程学报,2012,28(18):163-168.

[8] 朱春华,张宜志.粮食储备与决策系统的移动终端APP开发模型研究[J].食品工业,2017,38(4):254-256.

[9] 闫锋欣,牛子杰,杜烁炜,等.基于Qt的Android应用程序C/C++开发方法与实践[J].计算机系统应用,2018,27(7):96-102.

[10] 喻晓,夏澎.基于Qt的便携式心电监护仪GUI应用软件设计[J].计算机系统应用,2017,26(5):221-226.

【通联编辑:谢媛媛】

基金项目:江西省高等学校教学改革研究课题(编号:JXJG-23-24-3)

猜你喜欢
编程语言跨平台
跨层级网络、跨架构、跨平台的数据共享交换关键技术研究与系统建设
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
压力-体积转换在CFC编程语言中的实现解析
一款游戏怎么挣到全平台的钱?
Java编程语言的特点与应用
跨平台APEX接口组件的设计与实现
常用计算机编程语言的分析及选用技巧
浅谈不同编程语言对计算机软件开发的影响
面向对象Web开发编程语言的的评估方法
基于QT的跨平台输电铁塔监控终端软件设计与实现