《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Qt/Embedded的病房管理系統(tǒng)界面的設(shè)計(jì)
基于Qt/Embedded的病房管理系統(tǒng)界面的設(shè)計(jì)
來(lái)源:微型機(jī)與應(yīng)用2013年第3期
張 強(qiáng),張 偉
(湖北大學(xué) 物理學(xué)與電子技術(shù)學(xué)院,湖北 武漢430062)
摘要: 根據(jù)醫(yī)院病房工作特點(diǎn),實(shí)現(xiàn)了基于Qt/Embedded的病房管理系統(tǒng)界面的設(shè)計(jì)。實(shí)驗(yàn)結(jié)果表明,該病房管理系統(tǒng)界面能較好地實(shí)現(xiàn)病患相關(guān)信息的查詢(xún)顯示以及醫(yī)患交互功能,具有簡(jiǎn)潔、友好的特點(diǎn)。在管理系統(tǒng)上實(shí)現(xiàn)病人信息、治療信息、病情信息、醫(yī)囑、費(fèi)用、呼叫等功能,并可對(duì)其進(jìn)行移植。詳細(xì)介紹了系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。
Abstract:
Key words :

摘  要: 根據(jù)醫(yī)院病房工作特點(diǎn),實(shí)現(xiàn)了基于Qt/Embedded病房管理系統(tǒng)界面的設(shè)計(jì)。實(shí)驗(yàn)結(jié)果表明,該病房管理系統(tǒng)界面能較好地實(shí)現(xiàn)病患相關(guān)信息的查詢(xún)顯示以及醫(yī)患交互功能,具有簡(jiǎn)潔、友好的特點(diǎn)。在管理系統(tǒng)上實(shí)現(xiàn)病人信息、治療信息、病情信息、醫(yī)囑、費(fèi)用、呼叫等功能,并可對(duì)其進(jìn)行移植。詳細(xì)介紹了系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。
關(guān)鍵詞: 信息技術(shù);數(shù)字化醫(yī)院;Qt/Embedded;病房管理系統(tǒng)

 將先進(jìn)的計(jì)算機(jī)技術(shù)、通信技術(shù)、傳感器技術(shù)等運(yùn)用在醫(yī)院中,能有效地減輕醫(yī)護(hù)人員工作強(qiáng)度、提高醫(yī)護(hù)效率和醫(yī)療質(zhì)量、可盡量減少誤差以避免醫(yī)療事故和醫(yī)療差錯(cuò),為公眾提供優(yōu)質(zhì)便捷的醫(yī)療服務(wù),使醫(yī)院更加高效、可靠地運(yùn)營(yíng)。病房管理系統(tǒng)是數(shù)字化醫(yī)院的重要組成部分,良好的界面設(shè)計(jì)則是系統(tǒng)可用和易用的關(guān)鍵。本文利用嵌入式技術(shù)和Qt界面開(kāi)發(fā)技術(shù),完成了一種簡(jiǎn)潔實(shí)用的病房管理系統(tǒng)界面設(shè)計(jì),成功實(shí)現(xiàn)了前臺(tái)界面和后臺(tái)數(shù)據(jù)庫(kù)的連接,為病患查詢(xún)相關(guān)信息、與醫(yī)護(hù)人員交互提供了友好的平臺(tái)。
1 系統(tǒng)界面功能需求及開(kāi)發(fā)平臺(tái)
1.1 系統(tǒng)界面功能需求

 根據(jù)項(xiàng)目需求分析,所設(shè)計(jì)的病房管理系統(tǒng)圖形界面如圖1所示,其主要功能[1]包括病人信息、治療信息、病情信息、短消息、醫(yī)囑、費(fèi)用、呼叫、調(diào)試頁(yè)等。

1.2 系統(tǒng)界面開(kāi)發(fā)平臺(tái)
 本系統(tǒng)在以S3C6410A微處理器芯片為核心的嵌入式終端系統(tǒng)硬件平臺(tái)上,利用Qt作為圖形界面開(kāi)發(fā)工具。Qt是一個(gè)跨平臺(tái)的C++開(kāi)發(fā)工具,不但擁有完善的C++圖形庫(kù),還集成了數(shù)據(jù)庫(kù)、OpenGL庫(kù)、多媒體庫(kù)、網(wǎng)絡(luò)庫(kù)、腳本庫(kù)、XML庫(kù)、WebKit庫(kù)等,而其內(nèi)核庫(kù)還加入了進(jìn)程間通信、多線程等模塊,極大地豐富了Qt開(kāi)發(fā)大規(guī)模復(fù)雜跨平臺(tái)應(yīng)用程序的能力。
 Qt/Embedded是圖形化界面開(kāi)發(fā)工具Qt的嵌入式版本,它通過(guò)QtAPI與Linux I/O以及Framebuffer[2]直接交互,擁有較高的運(yùn)行效率,而且整體采用面向?qū)ο缶幊蹋瑩碛辛己玫捏w系架構(gòu)和編程模式。
2 系統(tǒng)界面的開(kāi)發(fā)過(guò)程
 在GUI用戶(hù)界面中,當(dāng)用戶(hù)操作一個(gè)窗口部件時(shí), 需要其他窗口部件的響應(yīng)或者能夠激活其他的操作。而在程序開(kāi)發(fā)中,經(jīng)常使用回調(diào)機(jī)制來(lái)實(shí)現(xiàn)。但Qt提供的信號(hào)和槽機(jī)制不同于回調(diào)函數(shù)機(jī)制,其信號(hào)是一個(gè)特定的標(biāo)識(shí);而槽機(jī)制是一個(gè)槽就是一個(gè)函數(shù),與一般的函數(shù)不同,槽函數(shù)既能夠與信號(hào)關(guān)聯(lián),也能夠像普通函數(shù)一樣直接調(diào)用。當(dāng)某個(gè)事件出現(xiàn)時(shí),通過(guò)發(fā)送信號(hào),可以將與之相關(guān)聯(lián)的槽函數(shù)激活,即執(zhí)行槽函數(shù)代碼。在程序中,使用QObject::connect()函數(shù)來(lái)將某個(gè)信號(hào)和某個(gè)槽進(jìn)行關(guān)聯(lián),而信號(hào)和槽之間的真正關(guān)聯(lián)是由Qt的信號(hào)和槽機(jī)制來(lái)實(shí)現(xiàn)的。
 系統(tǒng)界面的開(kāi)發(fā)主要分4個(gè)部分:(1)軟件平臺(tái)的移植;(2)系統(tǒng)圖形界面的設(shè)計(jì);(3)系統(tǒng)界面功能的實(shí)現(xiàn),主要通過(guò)TCP訪問(wèn)服務(wù)器并接收其發(fā)出的數(shù)據(jù);(4)系統(tǒng)界面的移植。
2.1 Qt/Embedded的移植
 實(shí)現(xiàn)Qt/Embedded的移植[3]需要下載qt-everywhere-opensource-src-4.7.3軟件包。由于完整的Qt/Embedded圖形庫(kù)對(duì)于嵌入式設(shè)備資源的要求很高,因此,應(yīng)根據(jù)項(xiàng)目需求在安裝過(guò)程中利用參數(shù)進(jìn)行配置和剪裁。主要參數(shù)配置如下:
 -prefix  //設(shè)置安裝路徑
 -qt-mouse-tslib //支持觸摸屏
 -I /usr/local/arm/tslib/build/include  
 //指定觸摸屏的頭文件目錄
 -L /usr/local/arm/tslib/build/lib
 //指定觸摸屏的庫(kù)文件目錄
 利用make進(jìn)行編譯,然后利用make install把安裝文件打包下載到ARM板上,這樣即完成了Qt/Embedded的移植。
2.2 系統(tǒng)圖形界面的設(shè)計(jì)
2.2.1 網(wǎng)頁(yè)界面的設(shè)計(jì)

 根據(jù)項(xiàng)目需求,利用Qt creator設(shè)計(jì)整體的操作界面。首先創(chuàng)建一個(gè)主窗口,在這個(gè)窗口上放置一個(gè)QTabWidget窗口部件,并在其頂部可以編輯系統(tǒng)的一些功能,如:ui->tabWidget->setTabText(0,tr("病人信息")),定義該窗口標(biāo)簽為病人信息;然后在這一窗口部件上放置一個(gè)QWebView子窗口部件。QWebView類(lèi)是Qt webkit模塊中最常用到的類(lèi)之一,它用來(lái)創(chuàng)建一個(gè)可以view和edit文檔的widget,也就是說(shuō)可以通過(guò)QWebView來(lái)查看和編輯網(wǎng)頁(yè),即通過(guò)QWebView類(lèi)可以實(shí)現(xiàn)病人信息的查看。其系統(tǒng)的網(wǎng)頁(yè)界面(ui)的設(shè)計(jì)如圖2所示。

2.2.2 呼叫界面的設(shè)計(jì)
 首先建立一個(gè)主窗口,在這個(gè)主窗口上放置一個(gè)行編輯框用來(lái)輸入病床號(hào)、若干個(gè)數(shù)字按鈕、一個(gè)呼叫按鈕和一個(gè)掛斷按鈕。輸入要呼叫的病床號(hào),當(dāng)按下呼叫按鈕時(shí),發(fā)出信號(hào)signal(),將與之相關(guān)聯(lián)的槽函數(shù)slot()激活,執(zhí)行槽函數(shù)代碼。實(shí)現(xiàn)代碼為connect(ui->StartCall,SIGNAL(clicked()),this,SLOT(startCall()))。其系統(tǒng)的呼叫界面的設(shè)計(jì)如圖3所示。

 Qt提供了QTcpSocket類(lèi)[5]和QTcpServer類(lèi),用于編寫(xiě)TCP客戶(hù)端和服務(wù)器的應(yīng)用程序。QTcpSocket類(lèi)提供了TCP協(xié)議的通用接口,采用異步工作方式,依靠Qt事件循環(huán)發(fā)現(xiàn)外來(lái)數(shù)據(jù)和向外發(fā)送的數(shù)據(jù),并以信號(hào)的方式報(bào)告狀態(tài)改變或產(chǎn)生的錯(cuò)誤。而QTcpServer類(lèi)則在服務(wù)器端處理外來(lái)的TCP客戶(hù)連接,其功能實(shí)現(xiàn)的主要代碼如下:
 host=settings.value("PC_SERVER_IP","192.168.1.2").toString();  //ARM端的TCPServer監(jiān)聽(tīng)該端口
 m_configTcpport=settings.value("LISTEN_PC_TCP_PORT",
           6666).toInt();
 //當(dāng)需要更新數(shù)據(jù)時(shí),ARM向PC該端口發(fā)送"arm\r\n"
 tcpSocket=new QTcpSocket(this); //變量tcpSocket
 //是QTcpSocket的實(shí)例,封裝了一條TCP連接
 void MainWindow::manualUpdateConnectSuccess()
     //定義一個(gè)更新數(shù)據(jù)的函數(shù)
 void MainWindow::manualUpdateReceiveData()
 //定義一個(gè)接收更新后的數(shù)據(jù)的函數(shù)
 connect(tcpSocket,SIGNAL(connected()),this,SLOT
          (manualUpdateConnectSuccess()));
 connect(tcpSocket,SIGNAL(readyRead()),this,SLOT
          (manualUpdateReceiveData()));
 一旦連接建立成功,QTcpSocket類(lèi)將發(fā)出connected()消息,繼而調(diào)用manualUpdateConnectSuccess()槽函數(shù)。manualUpdateConnectSuccess()函數(shù)則進(jìn)行數(shù)據(jù)更新,當(dāng)發(fā)出數(shù)據(jù)時(shí),QTcpSocket類(lèi)將會(huì)產(chǎn)生readyRead()信號(hào),繼而調(diào)用manualUpdateReceiveData()槽函數(shù),接收更新后的新數(shù)據(jù)。如果連接或數(shù)據(jù)傳輸過(guò)程中的某次操作發(fā)生錯(cuò)誤,QTcpSocket類(lèi)會(huì)發(fā)出error()信號(hào),并觸發(fā)錯(cuò)誤處理函數(shù)displayError(),關(guān)閉連接。其功能實(shí)現(xiàn)代碼如下:
tcpServer=new QTcpServer(this);
//變量tcpServer是QTcpServer類(lèi)的實(shí)例,
//它負(fù)責(zé)監(jiān)聽(tīng)并處理外來(lái)連接請(qǐng)求
clientConnection=new QTcpSocket(this);
//clientConnection是QTcpSocket類(lèi)的實(shí)例,
//它封裝了一條TCP連接
tcpServer->listen(QHostAddress::Any,m_configTcpport);
//QTcpServer的listen()函數(shù)判斷當(dāng)前服務(wù)器已處
//在監(jiān)控狀態(tài)以及在本地端口建立監(jiān)聽(tīng)已成功
connect(tcpServer,SIGNAL(newConnection()),this,
          SLOT(acceptConnection()));
void MainWindow::acceptConnection()
//具體實(shí)現(xiàn)接收客戶(hù)端連接請(qǐng)求并做回應(yīng)的函數(shù)
{
clientConnection=tcpServer->nextPendingConnection();
connect(clientConnection,SIGNAL(readyRead()),this,
          SLOT(tcpServerReceiveData()));
}
 當(dāng)有客戶(hù)端連接請(qǐng)求到來(lái)時(shí),QTcpSocket類(lèi)將會(huì)發(fā)出newConnection()信號(hào),從而觸發(fā)acceptConnection()函數(shù)。QTcpServer類(lèi)在接收了外來(lái)TCP連接請(qǐng)求后,可以通過(guò)nextPendingConnection()函數(shù)獲取一個(gè)新的已建立連接的子套接字,并返回QTcpSocket類(lèi)指針將返回值保存在clientConnection變量中;當(dāng)建立的連接有新的可供讀取的數(shù)據(jù)時(shí),QTcpSocket類(lèi)會(huì)發(fā)出readyRead()信號(hào),從而觸發(fā)tcpServerReceiveData()函數(shù),該函數(shù)完成數(shù)據(jù)的接收;而當(dāng)新連接中產(chǎn)生錯(cuò)誤時(shí)則會(huì)發(fā)出error()信號(hào)。
2.4 圖形界面的移植
 完成Qt應(yīng)用程序在PC端的Linux下的仿真運(yùn)行、對(duì)源程序進(jìn)行交叉編譯、將生成的可執(zhí)行文件和相關(guān)的庫(kù)文件拷貝到開(kāi)發(fā)板上,即可實(shí)現(xiàn)移植,在開(kāi)發(fā)板上將顯示出如圖5所示的圖形界面。

 

 

 在Linux操作系統(tǒng)下,采用Qt/Embedded作為圖形界面開(kāi)發(fā)工具,利用其高效性和跨平臺(tái)性,實(shí)現(xiàn)了病房管理系統(tǒng)界面的設(shè)計(jì),并進(jìn)行移植,使其穩(wěn)定地在ARM11開(kāi)發(fā)板上運(yùn)行。保證了應(yīng)用系統(tǒng)的快速高效,極大地提高了護(hù)士、醫(yī)生的工作效率,同時(shí)給醫(yī)院和病人帶來(lái)很大的方便。
參考文獻(xiàn)
[1] 馬錫坤,徐旭東,胡敏.病房醫(yī)生工作站信息系統(tǒng)的功能與應(yīng)用[J].醫(yī)療設(shè)備信息,2007(1).
[2] 丁林松,黃麗琴.Qt4圖形設(shè)計(jì)與嵌入式開(kāi)發(fā)[M].北京:人民郵電出版社,2009.
[3] 趙辛晨,吳仲光,唐建兵.基于Qt/Embedded的數(shù)碼一體機(jī)圖形界面設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2011,30(7).
[4] SCAGLIA S.嵌入式Internet TCP/IP基礎(chǔ)、實(shí)現(xiàn)及應(yīng)用[M].潘琢金,徐蕾,拱長(zhǎng)青,譯.北京:北京航空航天大學(xué)出版社,2008.
[5] 蔡志明,盧傳富,李立夏.精通Qt4編程[M].北京:電子工業(yè)出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。