第一文秘网    > 工作汇报

嵌入式机车车辆车载播放系统软件设计与实现

作者:jnscsh   时间:2022-03-31 08:40:54   浏览次数:


打开文本图片集

【摘要】系统使用Qt Creator作为开发工具,综合嵌入式数据库SQLite、开源多媒体播放器MPlayer技术,设计并实现了一个具有良好人机交互界面的嵌入式机车车辆车载播放系统,可对主流音视频文件进行播放,且系统易于移植和扩展。

【关键词】机车车辆车载播放系统;Qt Creator;SQLite;MPlayer

1.Qt简介

Qt是Trolltech公司的标志性产品(现Trolltech公司已被手机巨头NOKIA公司收购),是一个跨平台的C++图形用户界面(GUI)工具包。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。Qt应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口便可执行与平台非相关的应用开发与配置。

Qt支持下述平台:

1)MS/Windows-95、98、NT 4.0、ME、2000、XP、Vista和Win7;

2)Unix/X11-Linux、Sun Solaris、HP-UX、CompaqTru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS和其它很多X11平台;

3)Macintosh-Mac OS X;

4)Embedded-有帧缓冲(framebuffer)支持的嵌入式Linux平台,Windows CE。

Qt对不同平台的专门API进行了专门的封装(文件处理、网络等)[1]。

Qt被Nokia收购后推出了一款新的轻量级集成开发环境(IDE)Qt Creator。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。

Qt Creator包含了一套用于创建和测试基于Qt应用程序的高效工具,包括:一个高级的C++代码编辑器、上下文感知帮助系统、可视化调试器、源代码管理、项目和构建管理工具。

Qt/Embedded(简称QT/E)是一个专门为嵌入式系统设计图形用户界面的工具包,是NOKIA公司的图形化界面开发工具Qt的嵌入式版本,它通过QtAPI与Linux I/O以及Framebuffer直接交互,拥有较高的运行效率,而且整体采用面向对象编程,拥有良好地体系架构和编程模式。Qt/embedded和Qt一样,在4.5版本之后提供了三种不同的授权协议GPL,LGPL和Commercial。开发者使用QT/E开发的应用程序要移植到不同平台时,只需要重新编译代码,而不需要对代码进行修改。并可以随意设置程序界面的外观、方便地为程序连接数据库、使程序本地化、将程序与Java集成等。

2.使用Qt Creator设计界面

在Qt Creator中完成车载播放器工程的创建后首先是设计界面。界面可用代码生成,也可用Qt Designer辅助设计。使用Qt Designer设计界面只需将界面中所需的窗口部件拖入ui界面文件中,然后设置属性修改其显示效果,最后使用布局控件设置布局效果。通过拖放窗口部件完成的界面在布局上不够精确,因此本系统采用纯代码来完成界面开发。

本系统的界面主要包括的窗口部件有Table View、Push Button等。在界面的布局上,系统采用了手工布局方式。手工布局方式通过基类QWidget提供的setGeometry()函数来设置子窗口部件的位置和大小,当窗口大小改变的时候,重新计算窗口的大小或者变化比例,然后重载QWidget::resizeEvent(QResizeEvent*)函数,能够使得子窗口部件的大小和位置作出适应性的改变。

如图1所示为本系统的主界面:

界面设计的主要开发过程如下:

1)使基础窗口QWidget继承于主窗口QMainWindow,窗体构造函数负责模板的初始化;

2)创建MyButton类构造窗体按钮部件,并对窗口部件中使用的对象以及函数进行声明,包括图标、名称、字体、文本、坐标、画笔、按钮是否有效、重绘时间、鼠标按下事件等;

3)添加按钮的信号与槽。系统界面中每个功能按钮都对应一个信号和槽,信号和槽式Qt编程的核心技术,通过信号可以将界面上的空间所发生的事件进行发射,槽函数负责接受相应信号并作出响应处理。如播放暂停按钮,与其对应的信号是单击,它的单击信号连接一个槽处理函数,在这个函数中通过QProcess来向slave模式下的MPlayer发送命令,达到控制播放的目的。其他的控件在处理方式上都与播放暂停按钮类似,都有自己得信号和槽。

3.软件功能模块设计

机车车辆车载播放器主要由音频播放和视频播放两大部分组成,这两部分存在着很多相同和相似的功能,为避免重复编码,采用C++面向对象的模块化设计思想,将两部分中功能相似的部分抽取出来,形成独立的功能模块,提高了软件的可重用性和系统的运行效率。各功能模块均采用C++类来实现,对模块内部的数据进行封转,对外提供接口供外部调用,一方面提高了系统的数据安全性,另一方面也使软件编码更加的规范[2]。

为实现机车车辆车载播放系统的功能,创建了窗体文件用于设置车载播放器的窗体;创建了配置文件用于处理系统配置信息;创建了用于实现对数据库操作的源文件;创建了触摸屏控制文件以及歌曲列表文件。

具体功能模块设计方式如下:

1)搜索歌曲

点击搜索歌曲按钮时,跳出一个对话框,当用户输入了歌曲名或名称中的部分内容并确定后,发送消息到服务器端,服务器端对表song进行模糊查询,得到符合的歌曲列表,将这些信息返回给客户端,在客户端形成一个QwidgetTable控件,用来显示搜索的结果。当用户点击其中的一行时,将相应行的歌曲信息赋值给current并播放。

2)上一首

上一首按钮连接了prev()函数,它的功能是通过prev()函数来实现的。在此函数中,实现读取usersong.xml文件中位置为songpos-1的歌曲信息,赋值给current,然后进行播放,实现上一首功能。

3)播放

当点击播放按钮时,隐藏播放按钮,显示暂停按钮,并读取current中的信息,通过Phonon的函数play()实现播放。

4)暂停

当点击暂停按钮时,隐藏暂停按钮,显示播放按钮,调用Phonon中的pause()函数,将播放暂停。

5)下一首

当点击下一首按钮时,调用nextFile()函数,并且当歌曲播放完之后会产生一个aboutToFinish()信号,这个时候也会调用nextFile()函数。在此函数中调用readinformation()函数,得到下一首的信息,并播放。

6)打开本地文件

Qt和QT/Embedded提供了一套标准的通用对话框为方便程序员进行某些特定功能对话框的编程,其中包括了文件对话框QFileDialog。通过弹出QFileDialog对话框,我们既可以选择一个或者多个文件以及目录,也可以输入文件名或者路径。它可以限制用户只能选择已经存在的文件,也可以允许用户输入一个新的文件名;此外,使用过滤器,则只能选择符合特殊标准的文件名。点击打开按钮会弹出获取本地文件路径和名称的对话框,当用户选中后,因为它是本地文件,会直接把地址赋给播放的对象,当播放完后继续播放usersong.xml中的下一首。

7)静音

音量的控制是通过Phonon::VolumSl-

ider控件实现的,通过执行语句:ui->volumeSlider->setAudioOutput(audio-output)将音量的控件连接到了音频输出的设备上,通过语句Phonon::createPath(mediaobject,audiooutput)音频输出的设备和播放的对象mediaobject连接,因此实现静音功能。

8)显示歌曲名称

void Player::setLabel(QString track)

{

QString filename = mediaObject->currentSource().fileName();

filename = filename.right (filename.length() - filename.lastIndexOf("/")-1);

this->setWindowTitle("Player~"+filename);

}

9)关闭窗口

双击窗体空白处可关闭播放器。需重定义鼠标双击事件调用close()函数加以实现。

10)数据库操作

程序中使用SQLite数据库对歌曲及用户信息进行管理。

SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性,非常健壮。SQLite第一个Alpha版本诞生于2000年5月,至今已经有11个年头,最新版本SQLite3也已经发布。SQLite是完全免费开源的软件。

SQLite能够运行在Windows/Linux/Unix等各种操作系统。SQLite源代码大约3万行,250KB大小,占用资源非常少。相比Mysql、PostgreSQL这两款著名的开源数据库,SQLite占用资源更少,处理速度更快,非常适合用于嵌入式系统开发中。

在系统中采用SQLite数据库对歌曲信息结构进行组织、存储以及管理。通过使用SQLite建立歌曲信息数据库表,然后就可以在程序通过相关接口函数对歌曲信息进行操作,如插入、删除、更新、查询等。采用SQLite数据库进行歌曲信息的管理大大降低了编程的复杂性。

在具体的系统数据库模块中,采用了Qt连接SQLite数据库的方式来操作数据库。Qt框架中QtSql模块提供了一个平台无关且数据库无关的访问SQL数据库的接口。Qt中的每个数据库连接用一个QSqlDatabase对象来表示,同时Qt也使用不同driver来和各种不同数据库的API进行通讯。对于SQLite数据库Qt提供了很好的支持和封装,通过Qt的相关类可以很容易的进行数据库操作[3]。

要实现对SQLite数据库进行操作首先需要创建一个关于数据库的创建和链接的头文件,然后在头文件中通过创建QSqlDatabase数据库连接对象来调用addDatabase()并设置相关函数的属性,然后在工程文件的最后添加关于使用数据库的声明“QT+=sql”。

4.MPlayer播放器的控制

MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流作业系统使用,例如Linux和其他类Unix系统、微软的视窗系统及苹果电脑的Mac OS X系统。MPlayer能够播放大多数MPEG、VOB、AVI、OGG、VIVO、ASF/WMV、Qt/MOV、FLV、RM等媒体文件。相对其它播放器来说,MPlayer还具有资源占用非常少,不需要任何系统解码器就可以播放各种媒体格式,在低配置的机器上使用等突出优势。所以对于运算速度相对较弱的嵌入式系统来说,MPlayer是一个很好的选择[4]。

在本文的系统设计中,选用了MPlayer作为系统的媒体播放器来进行媒体文件的播放以及控制。在系统的播放模块中采用Qt的QProcess(进程类)通过start方法调用slave模式下的MPlayer产生一个进程,然后通过QProcess类的write方法向MPlayer发送控制命令,实现控制播放的目的。

5.小结

本论文详细介绍了如何使用Qt Creator完成车载音乐播放系统的界面设计及程序代码的编辑与运行。此车载播放系统可实现的功能如下:

1)具有美观、易于理解和操作的主界面;

2)可按照多种方式对数据库中的歌曲进行查找;

3)可实现歌曲的播放、暂停,以及上一首和下一首歌曲的切换;

4)所选歌曲可生成播放列表,列表可以循环播放,列表信息可修改,在列表中双击歌曲名称可播放该歌曲;

5)可对设备中存储的歌曲进行删除;

6)可播放外接存储器中的歌曲。

同时,系统可以方便地移植到各种嵌入式设备中。

参考文献

[1]Jasmin Blanchette.C++ GUI Programming with Qt 4[M].北京:电子工业出版社,2008.

[2]杨向文.基于ARM-LINUX的嵌入式媒体播放器的研究与实现[D].大连:大连海事大学,2009.

[3]雷小俊,李伟.SQLite在嵌入式Web服务器中的应用[J].信息技术,2006.

[4]Crealse Sheng.MPlayer研究报告[Z].2007.

作者简介:刘春涛(1981—),男,山东青州人,大学本科,工程师,现供职于南车青岛四方机车车辆股份有限公司,研究方向:机车、电力动车组、城轨地铁车辆、列车网络。

推荐访问:嵌入式 播放 机车车辆 设计 系统