Qt5開發(fā)及實(shí)例第22章【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)課件_第1頁
Qt5開發(fā)及實(shí)例第22章【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)課件_第2頁
Qt5開發(fā)及實(shí)例第22章【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)課件_第3頁
Qt5開發(fā)及實(shí)例第22章【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)課件_第4頁
Qt5開發(fā)及實(shí)例第22章【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)課件_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第22章 【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)遠(yuǎn)程診斷系統(tǒng)功能需求第1頁,共56頁。遠(yuǎn)程診斷系統(tǒng)功能需求系統(tǒng)功能主要包括:(1)南京全市各分區(qū)醫(yī)院診療點(diǎn)科室管理。(2)CT影像的遠(yuǎn)程處理及診斷。(3)患者建檔信息選項(xiàng)卡表單。(4)后臺患者信息數(shù)據(jù)庫瀏覽。第2頁,共56頁。01診療點(diǎn)科室管理第3頁,共56頁。診療點(diǎn)科室管理診療點(diǎn)科室管理功能顯示效果如圖22.1所示。第4頁,共56頁。02CT影像顯示和處理第5頁,共56頁。診療點(diǎn)科室管理CT影像的遠(yuǎn)程處理及診斷如圖22.2所示,圖中央顯示一幅高清CT相片,右上角有年月日及時間顯示。第6頁,共56頁。03患者信息選項(xiàng)卡第7頁,共56頁?;颊咝畔⑦x項(xiàng)卡以表單

2、形式顯示患者的基本建檔信息,如圖22.3所示,包括“信息”和“病歷”兩個選項(xiàng)長。第8頁,共56頁。04后臺數(shù)據(jù)庫瀏覽第9頁,共56頁。后臺數(shù)據(jù)庫瀏覽患者的全部信息存儲于后臺數(shù)據(jù)庫MySQL中,在一個基本表上建立了兩個視圖,分別用于顯示基本信息和詳細(xì)信息病歷,信息在界面上以Qt的數(shù)據(jù)網(wǎng)格表控件展示,如圖22.4所示。第10頁,共56頁。05界面的總體效果第11頁,共56頁。界面的總體效果最終顯示出的界面的總體效果如圖22.5所示。第12頁,共56頁。第22章 【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)Qt項(xiàng)目工程創(chuàng)建與配置第13頁,共56頁。Qt項(xiàng)目工程創(chuàng)建與配置(1)創(chuàng)建Qt桌面應(yīng)用程序項(xiàng)目,項(xiàng)目名稱為Te

3、lemedicine。創(chuàng)建完成后,在Qt Creator開發(fā)環(huán)境中單擊左側(cè)欄的 按鈕切換至項(xiàng)目配置模式,如圖22.6所示。第14頁,共56頁。Qt項(xiàng)目工程創(chuàng)建與配置(2)將之前編譯安裝得到的OpenCV(含Contrib)庫文件,即D:OpenCV_3.4.3-Buildinstall x86mingwbin下的全部文件復(fù)制到項(xiàng)目的debug目錄,如圖22.7所示。(3)修改項(xiàng)目的.pro配置文件,在其中添加配置項(xiàng)。配置文件T內(nèi)容如下(加黑處為需要修改添加的地方)。第15頁,共56頁。第22章 【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)遠(yuǎn)程診療系統(tǒng)界面設(shè)計第16頁,共56頁。遠(yuǎn)程診療系統(tǒng)界面設(shè)計在開發(fā)環(huán)境項(xiàng)

4、目目錄樹狀視圖中,雙擊mainwindow.ui切換至遠(yuǎn)程診療系統(tǒng)可視化界面設(shè)計模式,如圖22.8所示,在其上拖曳設(shè)計出遠(yuǎn)程診療系統(tǒng)的整個圖形界面。第17頁,共56頁。遠(yuǎn)程診療系統(tǒng)界面設(shè)計為方便讀者試做,我們對界面上所有的控件都進(jìn)行了,的數(shù)字標(biāo)識(如圖22.9所示),并將它們的類型、名稱及屬性設(shè)置列于表22.1中,讀者可對照下面的圖和表自己進(jìn)行程序界面的制作及設(shè)置。第18頁,共56頁。遠(yuǎn)程診療系統(tǒng)界面設(shè)計(1)設(shè)計模式下在窗體上右擊樹狀視圖控件,選擇“編輯項(xiàng)目”,彈出如圖22.10所示的“編輯樹窗口部件”對話框,在“列”選項(xiàng)卡中單擊左下角的“新建項(xiàng)目”( )按鈕添加一列,文字編輯為“鼓樓醫(yī)院”

5、,本例的樹狀視圖添加一列即可。第19頁,共56頁。遠(yuǎn)程診療系統(tǒng)界面設(shè)計(2)切換到“項(xiàng)目”選項(xiàng)卡,通過單擊“新建項(xiàng)目”( )和“刪除項(xiàng)目”( )按鈕在“鼓樓醫(yī)院”列下添加或移除子節(jié)點(diǎn),通過單擊“新建子項(xiàng)目”( )按鈕創(chuàng)建編輯下一級子節(jié)點(diǎn),如圖22.11所示。第20頁,共56頁。遠(yuǎn)程診療系統(tǒng)界面設(shè)計最終編輯完成的樹狀視圖如圖22.12所示。第21頁,共56頁。第22章 【綜合實(shí)例】醫(yī)院遠(yuǎn)程診斷系統(tǒng)遠(yuǎn)程診療系統(tǒng)功能實(shí)現(xiàn)第22頁,共56頁。01數(shù)據(jù)庫準(zhǔn)備1設(shè)計表2創(chuàng)建視圖第23頁,共56頁。1設(shè)計表在MySQL中創(chuàng)建數(shù)據(jù)庫,名稱為patient,其中創(chuàng)建一個表user_profile。遠(yuǎn)程診斷系統(tǒng)數(shù)

6、據(jù)庫表設(shè)計見表22.2。列 名類 型長 度允 許 空 值說 明ssnchar18否社會保障號碼,主鍵namechar8否患者姓名sexchar2否性別,默認(rèn)為“男”ethnicchar10否民族,默認(rèn)為“漢”birthdate默認(rèn)否出生日期addressvarchar50是住址,默認(rèn)為NULLcasehistoryvarchar500是病歷,默認(rèn)為NULLpictureblob默認(rèn)是照片,默認(rèn)為NULL第24頁,共56頁。1設(shè)計表設(shè)計好表之后,往表中預(yù)先錄入一些數(shù)據(jù)供后面測試運(yùn)行程序用,如圖22.13所示。第25頁,共56頁。2創(chuàng)建視圖(1)Navicat for MySQL自帶視圖編輯功能展

7、開數(shù)據(jù)庫節(jié)點(diǎn),右擊“視圖”“新建視圖”,打開MySQL的視圖創(chuàng)建工具,如圖22.14所示。第26頁,共56頁。2創(chuàng)建視圖(2)用SQL語句創(chuàng)建視圖單擊Navicat工具欄的“查詢”( )“新建查詢”( )按鈕,打開查詢編輯器,輸入如下創(chuàng)建視圖的語句:CREATE VIEW details_inf(姓名,病歷,照片)ASselect name,casehistory,picture from user_profile然后單擊左上角工具欄的“運(yùn)行”按鈕( )執(zhí)行,如圖22.15所示。第27頁,共56頁。02Qt應(yīng)用程序主體框架第28頁,共56頁。Qt應(yīng)用程序主體框架本例程序源代碼包括三個文件:ma

8、in.cpp、mainwindow.h和mainwindow.cpp。(1)main.cpp這是整個程序的主啟動文件,代碼如下:#include mainwindow.h#include #include /使用Qt的進(jìn)程模塊int main(int argc, char *argv) QApplication a(argc, argv); if(!createMySqlConn() /若初次嘗試連接不成功,就轉(zhuǎn)而用代碼方式啟動MySQL服務(wù)進(jìn)程 QProcess process; process.start(C:/Program Files/MySQL/MySQL Server 5.6/bi

9、n/mysqld. exe); /第二次嘗試連接 if(!createMySqlConn() return 1; MainWindow w;/創(chuàng)建主窗體 w.show();/顯示主窗體 return a.exec();第29頁,共56頁。Qt應(yīng)用程序主體框架(2)mainwindow.h程序頭文件,包含程序中用到的各個全局變量的定義、方法聲明,代碼。在上面連接數(shù)據(jù)庫的createMySqlConn()方法中,有一段將患者照片插入數(shù)據(jù)庫的代碼,這是為了往MySQL中預(yù)先存入一些患者照片以便在運(yùn)行程序時顯示,讀者可以先運(yùn)行這段代碼將照片存入數(shù)據(jù)庫,在后面正式運(yùn)行系統(tǒng)時再將插入照片的代碼段注釋掉就可

10、以了。(3)mainwindow.cpp本程序的主體源文件中包含各方法功能的具體實(shí)現(xiàn)代碼,框架。第30頁,共56頁。03界面初始化功能實(shí)現(xiàn)第31頁,共56頁。界面初始化功能實(shí)現(xiàn)在窗體的構(gòu)造方法MainWindow:MainWindow(QWidget *parent)中是系統(tǒng)的如下初始化代碼:MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:MainWindow) ui-setupUi(this); initMainWindow(); /基本信息視圖 model = new QSqlTableMode

11、l(this);/(a) model-setTable(basic_inf); model-select(); /附加詳細(xì)信息視圖 model_d = new QSqlTableModel(this); model_d-setTable(details_inf); model_d-select(); /數(shù)據(jù)網(wǎng)格信息加載 ui-basicTableView-setModel(model); /初始化表單患者信息 onTableSelectChange(0);/(b)第32頁,共56頁。界面初始化功能實(shí)現(xiàn)其中,(a) model = new QSqlTableModel(this);:主程序中使用

12、模型機(jī)制來訪問數(shù)據(jù)庫視圖信息,用頭文件中定義好的模型對象指針(QSqlTableModel *)model執(zhí)行操作,通過其“-setTable(視圖名稱)”指明要訪問的視圖名,“-select()”加載視圖數(shù)據(jù),加載完成后就可以在后面整個程序中隨時訪問到模型中的數(shù)據(jù)信息。(b) onTableSelectChange(0);:該方法在數(shù)據(jù)網(wǎng)格選擇的行變更時觸發(fā)執(zhí)行,它有一個參數(shù),用于指定要顯示的行,初始默認(rèn)置為0表示顯示第一行;若為1則表示動態(tài)獲取顯示當(dāng)前選中的行。第33頁,共56頁。界面初始化功能實(shí)現(xiàn)上段程序中的MainWindow:initMainWindow()方法用于具體執(zhí)行初始化窗體

13、中要顯示的CT相片及系統(tǒng)當(dāng)前日期時間的功能,代碼如下:void MainWindow:initMainWindow() QString ctImgPath = D:QttestTumor.jpg;/路徑中不能含中文字符,且圖像大小1000*500 /QString ctImgPath = D:QttestCT.jpg; Mat ctImg = imread(ctImgPath.toLatin1().data(); /讀取CT相片數(shù)據(jù) cvtColor(ctImg, ctImg, COLOR_BGR2RGB); /(a) myCtImg = ctImg;/(b) myCtQImage = QIm

14、age(const unsigned char*)(ctImg.data), ctImg.cols, ctImg. rows, QImage:Format_RGB888); ctImgShow();/(c) /時間日期更新 QDate date = QDate:currentDate();/獲取當(dāng)前日期 int year = date.year(); ui-yearLcdNumber-display(year);/顯示年份 int month = date.month(); ui-monthLcdNumber-display(month);/顯示月份 int day = date.day();

15、 ui-dayLcdNumber-display(day);/顯示日期 myTimer = new QTimer(); /創(chuàng)建一個QTimer對象 myTimer-setInterval(1000); /設(shè)置定時器每隔多少毫秒發(fā)送一個timeout()信號 myTimer-start(); /啟動定時/綁定消息槽函數(shù) connect(myTimer, SIGNAL(timeout(), this, SLOT(onTimeOut();/(d)第34頁,共56頁。界面初始化功能實(shí)現(xiàn)其中,(a) cvtColor(ctImg, ctImg, COLOR_BGR2RGB);:由于OpenCV庫所支持的

16、圖像格式與Qt的圖像格式存在差異,所以必須使用cvtColor()函數(shù)對圖像格式進(jìn)行轉(zhuǎn)換,才能使其在Qt程序界面上正常顯示。(b) myCtImg = ctImg; myCtQImage = Qimage(.):OpenCV所處理的圖像必須是Mat類型的緩存像素形式,才能被程序中的方法隨時調(diào)用處理;而Qt用于保存的圖片則必須統(tǒng)一轉(zhuǎn)為QImage類型,故本例程序中對圖像進(jìn)行每一步處理后,都將其分別以這兩種不同形式賦值給兩個變量暫存,以便隨時供處理或存盤用。在Qt中,QImage類型的圖像還可供界面顯示用。(c) ctImgShow();:顯示CT相片的語句封裝于方法ctImgShow()內(nèi),在整

17、個程序范圍內(nèi)通用,其中僅有一條關(guān)鍵語句,如下:void MainWindow:ctImgShow() ui-CT_Img_Label-setPixmap(QPixmap:fromImage(myCtQImage. Scaled (ui-CT_ Img_ Label- size(), Qt:KeepAspectRatio);/在QT界面上顯示CT相片(d) connect(myTimer, SIGNAL(timeout(), this, SLOT(onTimeOut();:onTimeOut()方法是觸發(fā)時間顯示更新事件消息所要執(zhí)行的方法,內(nèi)容為:void MainWindow:onTimeOu

18、t() QTime time = QTime:currentTime();/獲取當(dāng)前系統(tǒng)時間 ui-timeEdit-setTime(time);/設(shè)置時間框里顯示的值第35頁,共56頁。04診斷功能實(shí)現(xiàn)1讀取CT相片2分析CT相片進(jìn)行診斷3保存診斷結(jié)果第36頁,共56頁。診斷功能實(shí)現(xiàn)界面上的“開始診斷”按鈕實(shí)現(xiàn)診斷功能,其事件代碼如下:void MainWindow:on_startPushButton_clicked() ctImgRead();/打開和讀取患者的CT相片 QTime time; time.start(); ui-progressBar-setMaximum(0);/(a)

19、 ui-progressBar-setMinimum(0); while (time.elapsed() progressBar-setMaximum(100); ui-progressBar-setMinimum(0); ctImgProc();/處理CT相片 ui-progressBar-setValue(0); ctImgSave();/保存結(jié)果相片第37頁,共56頁。1讀取CT相片ctImgRead()方法為醫(yī)生提供選擇所要分析的患者CT相片且讀取顯示的功能,實(shí)現(xiàn)代碼如下:void MainWindow:ctImgRead() QString ctImgName = QFileDial

20、og:getOpenFileName(this, 載入CT相片, ., Image File(*.png *.jpg *.jpeg *.bmp);/打開圖片文件對話框 if(ctImgName.isEmpty() return; Mat ctRgbImg, ctGrayImg; Mat ctImg = imread(ctImgName.toLatin1().data();/讀取CT相片數(shù)據(jù) cvtColor(ctImg, ctRgbImg, COLOR_BGR2RGB);/格式轉(zhuǎn)換為RGB cvtColor(ctRgbImg, ctGrayImg, CV_RGB2GRAY);/格式轉(zhuǎn)換為灰度圖

21、 myCtImg = ctRgbImg; myCtGrayImg = ctGrayImg; myCtQImage = QImage(const unsigned char*)(ctRgbImg.data), ctRgbImg.cols, ctRgbImg.rows, QImage:Format_RGB888); ctImgShow();第38頁,共56頁。2分析CT相片進(jìn)行診斷用OpenCV庫對打開的CT相片進(jìn)行處理,執(zhí)行ctImgProc()方法,代碼如下:void MainWindow:ctImgProc() QTime time; time.start(); ui-progressBar

22、-setValue(19);/進(jìn)度條控制功能 while(time.elapsed() 2000) QCoreApplication:processEvents(); ctImgHoughCircles();/霍夫圓算法處理 while (time.elapsed() progressBar-setValue(ui-progressBar-value() + 20); ctImgShow();/顯示處理后的CT相片 while(time.elapsed() progressBar-setValue(ui-progressBar-maximum(); QMessageBox:informatio

23、n(this, tr(完畢), tr(子宮內(nèi)壁見橢球形陰影,疑似子宮肌瘤);/消息框出診斷結(jié)果其中的ctImgHoughCircles()方法以Contrib擴(kuò)展庫中的霍夫圓算法檢測和定位病灶所在之處,實(shí)現(xiàn)代碼。第39頁,共56頁。3保存診斷結(jié)果將診斷結(jié)果保存在指定的目錄下,用ctImgSave()方法實(shí)現(xiàn),代碼如下:void MainWindow:ctImgSave() QFile image(D:QtimgprocTumor_1.jpg);/指定保存路徑及文件名 if (!image.open(QIODevice:ReadWrite) return; QByteArray qba;/緩存的

24、字節(jié)數(shù)組 QBuffer buf(&qba);/緩存區(qū) buf.open(QIODevice:WriteOnly);/以只寫方式打開緩存區(qū) myCtQImage.save(&buf, JPG);/以JPG格式寫入緩存 image.write(qba);/將緩存數(shù)據(jù)寫入圖像文件第40頁,共56頁。05患者信息表單1顯示表單信息2顯示照片3病歷聯(lián)動填寫第41頁,共56頁。1顯示表單信息當(dāng)用戶選擇數(shù)據(jù)網(wǎng)格中某患者的記錄條目時,執(zhí)行onTableSelectChange()方法,在表單中顯示該患者的信息,實(shí)現(xiàn)代碼如下:void MainWindow:on_basicTableView_clicked(

25、const QModelIndex &index) onTableSelectChange(1);參數(shù)(1)表示獲取當(dāng)前選中的條目行索引。onTableSelectChange()方法的實(shí)現(xiàn)代碼。第42頁,共56頁。2顯示照片showUserPhoto()方法顯示患者照片,實(shí)現(xiàn)代碼如下:void MainWindow:showUserPhoto() QPixmap photo; QModelIndex index; for(int i = 0; i rowCount(); i+) index = model_d-index(i, 0); QString current_name = model_d-data(index).toString(); if(current_pare(ui-nameLabel-text() = 0) index = model_d-index(i, 2); break; photo.loadFromData(model_d-data(index).toByteArray(), JPG); ui-photoLabel-setPixmap(photo);第43頁,共56頁。3病歷聯(lián)動填寫當(dāng)切換到“病歷”選項(xiàng)卡時,聯(lián)動填寫并顯示該患者的詳細(xì)病歷信息,該功能的實(shí)現(xiàn)代碼如下:void MainWindow:on_tabWidget_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論