摘 要: 根据医院病房工作特点,实现了基于Qt/Embedded的病房管理系统界面的设计。实验结果表明,该病房管理系统界面能较好地实现病患相关信息的查询显示以及医患交互功能,具有简洁、友好的特点。在管理系统上实现病人信息、治疗信息、病情信息、医嘱、费用、呼叫等功能,并可对其进行移植。详细介绍了系统的设计和实现。
关键词: 信息技术;数字化医院;Qt/Embedded;病房管理系统
将先进的计算机技术、通信技术、传感器技术等运用在医院中,能有效地减轻医护人员工作强度、提高医护效率和医疗质量、可尽量减少误差以避免医疗事故和医疗差错,为公众提供优质便捷的医疗服务,使医院更加高效、可靠地运营。病房管理系统是数字化医院的重要组成部分,良好的界面设计则是系统可用和易用的关键。本文利用嵌入式技术和Qt界面开发技术,完成了一种简洁实用的病房管理系统界面设计,成功实现了前台界面和后台数据库的连接,为病患查询相关信息、与医护人员交互提供了友好的平台。
1 系统界面功能需求及开发平台
1.1 系统界面功能需求
根据项目需求分析,所设计的病房管理系统图形界面如图1所示,其主要功能[1]包括病人信息、治疗信息、病情信息、短消息、医嘱、费用、呼叫、调试页等。
1.2 系统界面开发平台
本系统在以S3C6410A微处理器芯片为核心的嵌入式终端系统硬件平台上,利用Qt作为图形界面开发工具。Qt是一个跨平台的C++开发工具,不但拥有完善的C++图形库,还集成了数据库、OpenGL库、多媒体库、网络库、脚本库、XML库、WebKit库等,而其内核库还加入了进程间通信、多线程等模块,极大地丰富了Qt开发大规模复杂跨平台应用程序的能力。
Qt/Embedded是图形化界面开发工具Qt的嵌入式版本,它通过QtAPI与Linux I/O以及Framebuffer[2]直接交互,拥有较高的运行效率,而且整体采用面向对象编程,拥有良好的体系架构和编程模式。
2 系统界面的开发过程
在GUI用户界面中,当用户操作一个窗口部件时, 需要其他窗口部件的响应或者能够激活其他的操作。而在程序开发中,经常使用回调机制来实现。但Qt提供的信号和槽机制不同于回调函数机制,其信号是一个特定的标识;而槽机制是一个槽就是一个函数,与一般的函数不同,槽函数既能够与信号关联,也能够像普通函数一样直接调用。当某个事件出现时,通过发送信号,可以将与之相关联的槽函数激活,即执行槽函数代码。在程序中,使用QObject::connect()函数来将某个信号和某个槽进行关联,而信号和槽之间的真正关联是由Qt的信号和槽机制来实现的。
系统界面的开发主要分4个部分:(1)软件平台的移植;(2)系统图形界面的设计;(3)系统界面功能的实现,主要通过TCP访问服务器并接收其发出的数据;(4)系统界面的移植。
2.1 Qt/Embedded的移植
实现Qt/Embedded的移植[3]需要下载qt-everywhere-opensource-src-4.7.3软件包。由于完整的Qt/Embedded图形库对于嵌入式设备资源的要求很高,因此,应根据项目需求在安装过程中利用参数进行配置和剪裁。主要参数配置如下:
-prefix //设置安装路径
-qt-mouse-tslib //支持触摸屏
-I /usr/local/arm/tslib/build/include
//指定触摸屏的头文件目录
-L /usr/local/arm/tslib/build/lib
//指定触摸屏的库文件目录
利用make进行编译,然后利用make install把安装文件打包下载到ARM板上,这样即完成了Qt/Embedded的移植。
2.2 系统图形界面的设计
2.2.1 网页界面的设计
根据项目需求,利用Qt creator设计整体的操作界面。首先创建一个主窗口,在这个窗口上放置一个QTabWidget窗口部件,并在其顶部可以编辑系统的一些功能,如:ui->tabWidget->setTabText(0,tr("病人信息")),定义该窗口标签为病人信息;然后在这一窗口部件上放置一个QWebView子窗口部件。QWebView类是Qt webkit模块中最常用到的类之一,它用来创建一个可以view和edit文档的widget,也就是说可以通过QWebView来查看和编辑网页,即通过QWebView类可以实现病人信息的查看。其系统的网页界面(ui)的设计如图2所示。
2.2.2 呼叫界面的设计
首先建立一个主窗口,在这个主窗口上放置一个行编辑框用来输入病床号、若干个数字按钮、一个呼叫按钮和一个挂断按钮。输入要呼叫的病床号,当按下呼叫按钮时,发出信号signal(),将与之相关联的槽函数slot()激活,执行槽函数代码。实现代码为connect(ui->StartCall,SIGNAL(clicked()),this,SLOT(startCall()))。其系统的呼叫界面的设计如图3所示。
Qt提供了QTcpSocket类[5]和QTcpServer类,用于编写TCP客户端和服务器的应用程序。QTcpSocket类提供了TCP协议的通用接口,采用异步工作方式,依靠Qt事件循环发现外来数据和向外发送的数据,并以信号的方式报告状态改变或产生的错误。而QTcpServer类则在服务器端处理外来的TCP客户连接,其功能实现的主要代码如下:
host=settings.value("PC_SERVER_IP","192.168.1.2").toString(); //ARM端的TCPServer监听该端口
m_configTcpport=settings.value("LISTEN_PC_TCP_PORT",
6666).toInt();
//当需要更新数据时,ARM向PC该端口发送"arm\r\n"
tcpSocket=new QTcpSocket(this); //变量tcpSocket
//是QTcpSocket的实例,封装了一条TCP连接
void MainWindow::manualUpdateConnectSuccess()
//定义一个更新数据的函数
void MainWindow::manualUpdateReceiveData()
//定义一个接收更新后的数据的函数
connect(tcpSocket,SIGNAL(connected()),this,SLOT
(manualUpdateConnectSuccess()));
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT
(manualUpdateReceiveData()));
一旦连接建立成功,QTcpSocket类将发出connected()消息,继而调用manualUpdateConnectSuccess()槽函数。manualUpdateConnectSuccess()函数则进行数据更新,当发出数据时,QTcpSocket类将会产生readyRead()信号,继而调用manualUpdateReceiveData()槽函数,接收更新后的新数据。如果连接或数据传输过程中的某次操作发生错误,QTcpSocket类会发出error()信号,并触发错误处理函数displayError(),关闭连接。其功能实现代码如下:
tcpServer=new QTcpServer(this);
//变量tcpServer是QTcpServer类的实例,
//它负责监听并处理外来连接请求
clientConnection=new QTcpSocket(this);
//clientConnection是QTcpSocket类的实例,
//它封装了一条TCP连接
tcpServer->listen(QHostAddress::Any,m_configTcpport);
//QTcpServer的listen()函数判断当前服务器已处
//在监控状态以及在本地端口建立监听已成功
connect(tcpServer,SIGNAL(newConnection()),this,
SLOT(acceptConnection()));
void MainWindow::acceptConnection()
//具体实现接收客户端连接请求并做回应的函数
{
clientConnection=tcpServer->nextPendingConnection();
connect(clientConnection,SIGNAL(readyRead()),this,
SLOT(tcpServerReceiveData()));
}
当有客户端连接请求到来时,QTcpSocket类将会发出newConnection()信号,从而触发acceptConnection()函数。QTcpServer类在接收了外来TCP连接请求后,可以通过nextPendingConnection()函数获取一个新的已建立连接的子套接字,并返回QTcpSocket类指针将返回值保存在clientConnection变量中;当建立的连接有新的可供读取的数据时,QTcpSocket类会发出readyRead()信号,从而触发tcpServerReceiveData()函数,该函数完成数据的接收;而当新连接中产生错误时则会发出error()信号。
2.4 图形界面的移植
完成Qt应用程序在PC端的Linux下的仿真运行、对源程序进行交叉编译、将生成的可执行文件和相关的库文件拷贝到开发板上,即可实现移植,在开发板上将显示出如图5所示的图形界面。
在Linux操作系统下,采用Qt/Embedded作为图形界面开发工具,利用其高效性和跨平台性,实现了病房管理系统界面的设计,并进行移植,使其稳定地在ARM11开发板上运行。保证了应用系统的快速高效,极大地提高了护士、医生的工作效率,同时给医院和病人带来很大的方便。
参考文献
[1] 马锡坤,徐旭东,胡敏.病房医生工作站信息系统的功能与应用[J].医疗设备信息,2007(1).
[2] 丁林松,黄丽琴.Qt4图形设计与嵌入式开发[M].北京:人民邮电出版社,2009.
[3] 赵辛晨,吴仲光,唐建兵.基于Qt/Embedded的数码一体机图形界面设计与实现[J].微型机与应用,2011,30(7).
[4] SCAGLIA S.嵌入式Internet TCP/IP基础、实现及应用[M].潘琢金,徐蕾,拱长青,译.北京:北京航空航天大学出版社,2008.
[5] 蔡志明,卢传富,李立夏.精通Qt4编程[M].北京:电子工业出版社,2008.