版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGE2-重慶科技學(xué)院課程設(shè)計(jì)成果
院(系):_電氣與信息工程學(xué)院_班級:計(jì)科09-02學(xué)生姓名:學(xué)號:設(shè)計(jì)地點(diǎn)(單位)____I315_________________
設(shè)計(jì)題目:_____廣告自動更新系統(tǒng)_________完成日期:2012年7月6指導(dǎo)教師評語:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________成績(五級記分制):________________
教師簽名:_________________________
摘要隨著社會的發(fā)展,嵌入式linux在電子行業(yè)的應(yīng)用越來越廣泛,學(xué)習(xí)嵌入式linux顯得非常重要。這次課程設(shè)計(jì)的主要目的是在QT設(shè)計(jì)廣告顯示界面,顯示圖片。并且實(shí)現(xiàn)廣告自動更新,下載Ftp服務(wù)器的圖片后自動加載到QT設(shè)計(jì)的廣告界面。廣告界面設(shè)計(jì)至少包括兩個(gè)按鈕(用于切換圖片),實(shí)現(xiàn)QT界面上的按鈕功能。熟悉linux底層編程。利用QT設(shè)計(jì)界面,縮短開發(fā)時(shí)間。關(guān)鍵字:嵌入式linux;基礎(chǔ)題;廣告自動更新;QT
目錄課程設(shè)計(jì)任務(wù)書 -5-題目一基礎(chǔ)題 -8-1設(shè)計(jì)內(nèi)容及要求 -8-1.1二小題 -8-1.2三小題 -8-1.3四小題 -9-1.3五小題 -10-1.4六小題 -12-1.5七小題 -13-1.6八小題 -15-題目二廣告自動更新系統(tǒng) -17-1.設(shè)計(jì)內(nèi)容及要求 -17-1.1廣告自動更新系統(tǒng)的基本要求 -17-1.2需實(shí)現(xiàn)的主要功能 -17-2.需求分析 -17-2.1QT設(shè)計(jì) -17-2.2服務(wù)器端和客戶端的數(shù)據(jù)傳輸方式 -18-2.3服務(wù)器端功能設(shè)計(jì) -18-2.4客戶端功能設(shè)計(jì) -19-3.總體設(shè)計(jì) -20-3.1總體功能 -20-4.詳細(xì)設(shè)計(jì) -21-4.1功能分析和描述 -21-4.2客戶端功能模塊 -21-4.3服務(wù)器功能模塊 -23-5.代碼實(shí)現(xiàn) -24-5.1客戶端代碼 -24-6.功能實(shí)現(xiàn) -28-6.1圖片功能的實(shí)現(xiàn) -28-6.2在FTP服務(wù)器上添加添加圖片 -28-6.3瀏覽器自動加載服務(wù)器上的圖片 -29-7.總結(jié) -30-8.致謝 -31-9.參考文獻(xiàn) -32-
課程設(shè)計(jì)任務(wù)書重慶科技學(xué)院課程設(shè)計(jì)任務(wù)書設(shè)計(jì)題目:基礎(chǔ)題目學(xué)生姓名梁巧課程名稱嵌入式linux應(yīng)用與開發(fā)課程設(shè)計(jì)計(jì)科2009-01(嵌入式應(yīng)用),計(jì)科2009-02(嵌入式應(yīng)用),計(jì)科轉(zhuǎn)2011-01(嵌入式應(yīng)用)地點(diǎn)I315起止時(shí)間2012-設(shè)計(jì)內(nèi)容及要求GCC編譯器的使用,LINUX系統(tǒng)C程序設(shè)計(jì)編譯、調(diào)試方法編寫程序?qū)?shù)組內(nèi)容倒置a[]=”123456789”。利用指針將數(shù)據(jù)A的內(nèi)容復(fù)制到數(shù)據(jù)B。創(chuàng)建兩線程,通過打印輸出各自線程號和打印次序,要求從打印結(jié)果看出兩個(gè)線程是并發(fā)執(zhí)行的。創(chuàng)建兩線程,A線程通過消息隊(duì)列發(fā)消息,B線程收到后在屏幕打印輸出,要求兩線程個(gè)打印出線程號和消息內(nèi)容。創(chuàng)建兩線程,A線程循環(huán)打印數(shù)組a[100],B線程循環(huán)將數(shù)組成員+1,要求利用互斥鎖,使每次輸出a[0]==a[99].創(chuàng)建兩線程,A線程每2秒打印一次字母A,B線程每秒打印一次字母B,要求利用同步信號量,使輸出字母B總是在A之后,如“ABBABBABB……”。8、通過Makefile,將project中的兩個(gè).c編譯成.a,另一個(gè).c調(diào)用.a的函數(shù),要求實(shí)現(xiàn)靜態(tài)庫的生成和調(diào)用,運(yùn)行結(jié)果正確。設(shè)計(jì)參數(shù)進(jìn)度要求第一周之內(nèi)完成參考資料1、嵌入式Linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程.人民郵電出版社。華清遠(yuǎn)見嵌入式培訓(xùn)中心。2010.72、ZLGARMMAGIC2410實(shí)驗(yàn)指導(dǎo)、資料。3、嵌入式linux程序設(shè)計(jì)案例與實(shí)驗(yàn)教程.俞輝著,機(jī)械工業(yè)出版社。2009.3其它說明1.本表應(yīng)在每次實(shí)施前一周由負(fù)責(zé)教師填寫二份,學(xué)院審批后交學(xué)院教務(wù)辦備案,一份由負(fù)責(zé)教師留用。2.若填寫內(nèi)容較多可另紙附后。3.一題多名學(xué)生共用的,在設(shè)計(jì)內(nèi)容、參數(shù)、要求等方面應(yīng)有所區(qū)別。系主任:指導(dǎo)教師:易軍陳劉奎2012重慶科技學(xué)院課程設(shè)計(jì)任務(wù)書設(shè)計(jì)題目:廣告自動更新系統(tǒng)學(xué)生姓名梁巧課程名稱嵌入式linux應(yīng)用與開發(fā)課程設(shè)計(jì)計(jì)科2009-01(嵌入式應(yīng)用),計(jì)科2009-02(嵌入式應(yīng)用),計(jì)科轉(zhuǎn)2011-01(嵌入式應(yīng)用)地點(diǎn)I315起止時(shí)間2012-設(shè)計(jì)內(nèi)容及要求1、在QT設(shè)計(jì)廣告顯示界面,顯示圖片。2、廣告自動更新:下載Ftp服務(wù)器的圖片后自動加載到QT設(shè)計(jì)的廣告界面。3、廣告界面設(shè)計(jì)至少包括兩個(gè)按鈕(用于切換圖片),實(shí)現(xiàn)QT界面上的按鈕功能。選作:顯示flash廣告設(shè)計(jì)參數(shù)進(jìn)度要求做完基礎(chǔ)題目之后開始做本題目。參考資料1、嵌入式Linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程.人民郵電出版社。華清遠(yuǎn)見嵌入式培訓(xùn)中心。2010.72、ZLGARMMAGIC2410實(shí)驗(yàn)指導(dǎo)、資料。3、嵌入式linux程序設(shè)計(jì)案例與實(shí)驗(yàn)教程.俞輝著,機(jī)械工業(yè)出版社。2009.3其它說明1.本表應(yīng)在每次實(shí)施前一周由負(fù)責(zé)教師填寫二份,學(xué)院審批后交學(xué)院教務(wù)辦備案,一份由負(fù)責(zé)教師留用。2.若填寫內(nèi)容較多可另紙附后。3.一題多名學(xué)生共用的,在設(shè)計(jì)內(nèi)容、參數(shù)、要求等方面應(yīng)有所區(qū)別。系主任:指導(dǎo)教師:易軍陳劉奎2012題目一基礎(chǔ)題1設(shè)計(jì)內(nèi)容及要求1.1二小題編寫程序?qū)?shù)組內(nèi)容倒置a[]=”123456789”程序代碼實(shí)現(xiàn)如下:chara[]="0123456789";chartmp;inti=0,j=0;for(i=0,j=strlen(a)-1;i<=strlen(a)/2-1;i++,j--){tmp=a[i];a[i]=a[j];a[j]=tmp;}for(i=0;i<strlen(a);i++)printf("%c",a[i]);printf("\n");(3)程序分析:1.定義數(shù)組2.數(shù)組內(nèi)容倒置3.輸出倒置后數(shù)組內(nèi)容1.2三小題(1)利用指針將數(shù)據(jù)A的內(nèi)容復(fù)制到數(shù)據(jù)B。(2)程序代碼實(shí)現(xiàn)如下:charA[]="abcd";charB[]="1234";inti=0;char*tmp;tmp=A;for(i=0;i<strlen(A);i++)B[i]=*tmp++;for(i=0;i<strlen(A);i++)printf("%c",B[i]);printf("\n");(3)程序分析:1.定義數(shù)組2.定義指針3.指針指向數(shù)組A4.移動指針拷貝數(shù)字到B中5.顯示拷貝后的數(shù)組1.3四小題(1)創(chuàng)建兩線程,通過打印輸出各自線程號和打印次序,要求從打印結(jié)果看出兩個(gè)線程是并發(fā)執(zhí)行的。(2)程序代碼如下:#defineTHREAD_NUMBER 2#defineREPEAT_NUMBER 5#defineDELAY_TIME_LEVELS 10.0void*thrd_func(void*arg){ intthrd_num=(int)arg; intdelay_time=0; intcount=0; printf("Thread%disstarting\n",thrd_num); for(count=0;count<REPEAT_NUMBER;count++) { delay_time=(int)(rand()*DELAY_TIME_LEVELS/(RAND_MAX))+1; sleep(delay_time); printf("\tThread%d:job%ddelay=%d\n",thrd_num,count,delay_time); } printf("Thread%dfinished\n",thrd_num); pthread_exit(NULL);}intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; for(no=0;no<THREAD_NUMBER;no++)④ { res=pthread_create(&thread[no],NULL,thrd_func,(void*)no); } for(no=0;no<THREAD_NUMBER;no++) { res=pthread_join(thread[no],&thrd_ret); } return0;}(3)程序分析:程序中創(chuàng)建2個(gè)線程,為了更加方便地描述線程之間的并行執(zhí)行,讓2個(gè)線程重用一個(gè)執(zhí)行函數(shù)。每個(gè)線程都有5次循環(huán),每次循環(huán)之間會隨機(jī)等待1-10s的時(shí)間,意義在于模擬每個(gè)任務(wù)的到達(dá)時(shí)間是隨機(jī)的,更加形象看出線程之間的并行執(zhí)行。1.創(chuàng)建線程執(zhí)行函數(shù),程序中2個(gè)線程重用一個(gè)執(zhí)行函數(shù)。2.讓線程延時(shí),延時(shí)時(shí)間隨機(jī)產(chǎn)生。3.線程退出。4.創(chuàng)建2個(gè)線程。1.3五小題(1)創(chuàng)建兩線程,A線程通過消息隊(duì)列發(fā)消息,B線程收到后在屏幕打印輸出,要求兩線程個(gè)打印出線程號和消息內(nèi)容。(2)程序代碼如下:#defineBUFSZ 512#defineTHREAD_NUMBER 2structmessage{ longmsg_type; charmsg_text[BUFSZ];};structmessagemsg;intqid;/*Createqueue*/void*thrd_func0(void*arg){ intthrd_num=(int)arg;intlen=0; printf("Thread%disstarting\n",thrd_num);sprintf(msg.msg_text,"%s","sendthemsg"); msg.msg_type=getpid(); len=strlen(msg.msg_text); /*添加消息到消息隊(duì)列*/ msgsnd(qid,&msg,len,0);printf("sendthemessageis:%s\n",(&msg)->msg_text); pthread_exit(NULL);}void*thrd_func1(void*arg){ intthrd_num=(int)arg; printf("Thread%disstarting\n",thrd_num); /*讀取消息隊(duì)列*/ msgrcv(qid,&msg,BUFSZ,getpid(),0);printf("recvthemessageis:%s\n",(&msg)->msg_text); pthread_exit(NULL);}void*(*constfunc[THREAD_NUMBER])(void*)={thrd_func0,thrd_func1};intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; key_tkey; intlen;key=ftok(".",'a');⑦ qid=msgget(key,IPC_CREAT|0666);⑧ for(no=0;no<THREAD_NUMBER;no++) { res=pthread_create(&thread[no],NULL,func[no],(void*)no); } for(no=0;no<THREAD_NUMBER;no++)⑨ { res=pthread_join(thread[no],&thrd_ret); } (msgctl(qid,IPC_RMID,NULL);⑩ return0;}代碼分析如下:該程序?qū)崿F(xiàn)了使用消息隊(duì)列進(jìn)行線程之間的通信,包括消息隊(duì)列的創(chuàng)建、消息發(fā)送和讀取、消息隊(duì)列的撤銷和刪除等操作。1.定義消息隊(duì)列消息結(jié)構(gòu)體2.創(chuàng)建線程0,用于消息隊(duì)列發(fā)送消息3.添加消息到消息隊(duì)列4.退出線程5.創(chuàng)建線程1,用于消息隊(duì)列讀取消息6.讀取消息隊(duì)列7.根據(jù)不同的路徑和關(guān)鍵表示產(chǎn)生標(biāo)準(zhǔn)的key8.創(chuàng)建消息隊(duì)列9.等待線程10.從系統(tǒng)內(nèi)核中移走消息隊(duì)列1.4六小題(1)創(chuàng)建兩線程,A線程循環(huán)打印數(shù)組a[100],B線程循環(huán)將數(shù)組成員+1,要求利用互斥鎖,使每次輸出a[0]==a[99].(2)程序源代碼如下:#include<sys/types.h>#include<sys/ipc.h>#include<pthread.h>#include<semaphore.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>sem_tsem;void*thrd_fun1(void*arg){ intthrd_num=(int)arg;while(1){ printf("A\n");sem_post(&sem);sleep(2);} pthread_exit(NULL);}void*thrd_fun2(void*arg){intthrd_num=(int)arg;inti;while(1){sem_wait(&sem); printf("B\n");sleep(1); printf("B\n");sleep(1);}pthread_exit(NULL);}intmain(void){pthread_tthread[2];intno=0,res;void*thrd_ret;sem_init(&sem,0,0);res=pthread_create(&thread[0],NULL,thrd_fun1,(void*)no);if(res!=0){printf("Createthread1failed\n");exit(res);}res=pthread_create(&thread[1],NULL,thrd_fun2,(void*)no);if(res!=0){printf("Createthread1failed\n");exit(res);}for(no=0;no<2;no++){res=pthread_join(thread[no],&thrd_ret);if(!res){printf("Thread%dexit\n",no);}else{printf("Thread%dexitfailed\n",no);}}return0;}(3)程序分析如下:1.定義消息隊(duì)列消息結(jié)構(gòu)體2.創(chuàng)建線程0,用于消息隊(duì)列發(fā)送消息3.添加消息到消息隊(duì)列4.A線程循環(huán)打印數(shù)組a[100]5.B線程循環(huán)將數(shù)組成員+16.輸出a[0]==a[99]1.5七小題(1)創(chuàng)建兩線程,A線程每2秒打印一次字母A,B線程每秒打印一次字母B,要求利用同步信號量,使輸出字母B總是在A之后。(2)程序代碼如下:#defineTHREAD_NUMBER 2sem_tsem[THREAD_NUMBER];void*thrd_func0(void*arg)//A{ arg=arg; while(1){printf("A\n");sem_post(&sem[1]);sleep(2); } pthread_exit(NULL);}void*thrd_func1(void*arg)//B{ arg=arg; while(1){sem_wait(&sem[1]);printf("B\n");sleep(1); } pthread_exit(NULL);}void*(*constfunc[THREAD_NUMBER])(void*)={thrd_func0,thrd_func1};intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; for(no=0;no<THREAD_NUMBER;no++) { res=pthread_create(&thread[no],NULL,func[no],(void*)no); } printf("Createthreadsuccess\nWaitingforthreadstofinish...\n"); for(no=0;no<THREAD_NUMBER;no++) { sem_destroy(&sem[no]); } return0;}(3)程序分析如下:程序創(chuàng)建兩線程,實(shí)現(xiàn)A線程每2秒打印一次字母A,B線程每秒打印一次字母B,利用同步信號量,使輸出字母B總是在A之后。1.創(chuàng)建線程0執(zhí)行函數(shù),用于打印字符’A’2.打印字符’A’3.對信號量1進(jìn)行V操作4.延時(shí)2s5.退出線程6.創(chuàng)建線程1執(zhí)行函數(shù),用于打印字符’B’7.對信號量1進(jìn)行P操作8.打印字符’B’9.延時(shí)1s10.創(chuàng)建線程1.6八小題(1)通過Makefile將project中的一個(gè).c編譯成.a,另一個(gè).c調(diào)用.a的函數(shù),要求實(shí)現(xiàn)靜態(tài)庫的生成和調(diào)用,運(yùn)行結(jié)果正確。(2)編寫靜態(tài)庫程序thread.c如下:#include<stdio.h>voidpf1(void){printf("********\n");return;}voidpf2(void){printf("#########\n");return;}該程序定義兩個(gè)函數(shù),分別打印不同的內(nèi)容,該程序?qū)⒈痪幾g成.a靜態(tài)庫編寫調(diào)用程序call.c如下:externvoidpf1(void);externvoidpf2(void);intmain(void){pf1();pf2();return0;}該程序?qū)o態(tài)庫進(jìn)行調(diào)用,調(diào)用靜態(tài)庫中的兩個(gè)函數(shù)pf1和pf2。編寫Makefile如下:CC=gccCPPFLAGS=-cOBJS=thread.oSOURCE=thread.cCALL_SOURCE=call.cLIB=libthread.aEXEC=callAR=arthread:${OBJS} ${CC}-c${SOURCE}-o${OBJS} ${AR}rcsv$(LIB)thread.o ${CC}-o${EXEC}${CALL_SOURCE}-L.-lthread.PHONY:cleanclean: -rm-f${OBJS}${EXEC}${LIB}Makefile文件實(shí)現(xiàn)對靜態(tài)庫程序編譯成.a靜態(tài)庫,并且編譯調(diào)用靜態(tài)庫的程序call.c為可執(zhí)行文件call
題目二廣告自動更新系統(tǒng)1.設(shè)計(jì)內(nèi)容及要求1.1廣告自動更新系統(tǒng)的基本要求1、在QT設(shè)計(jì)廣告顯示界面,顯示圖片。2、廣告自動更新:下載Ftp服務(wù)器的圖片后自動加載到QT設(shè)計(jì)的廣告界面。3、廣告界面設(shè)計(jì)至少包括兩個(gè)按鈕(用于切換圖片),實(shí)現(xiàn)QT界面上的按鈕功能。1.2需實(shí)現(xiàn)的主要功能(1)在PC機(jī)上搭建FTP環(huán)境,建立FTP服務(wù)器。(2)服務(wù)器必須成功啟動。(3)QT編寫客戶端與服務(wù)器建立連接。(4)客戶端和服務(wù)器可以實(shí)現(xiàn)通信。(5)客戶端可自動下載FTP服務(wù)器上的圖片自動加載到瀏覽器上顯示。(6)利用QT設(shè)計(jì)界面,并下載到ARM板上面。2.需求分析2.1QT設(shè)計(jì)QT設(shè)計(jì)編寫和調(diào)試階段使用4.7.1編譯器,運(yùn)行測試階段使用QTforARM編譯器。使用QTforPC階段編譯程序的步驟如下(以編譯hello.cpp程序?yàn)槔海?)進(jìn)入/x86-qtopia目錄,運(yùn)行set-env腳本,設(shè)置環(huán)境變量。$.set-env(2)進(jìn)入hello目錄,然后用progen工具生成工程文件。$cdhello$vihello.cpp$progen–tapp.t–o(3)使用tmake工具,生成hello工程的Makefile文件。$tmake-oMakefile(4)修改Makefile文件,在LIBS變量中增加需要用到的庫,然后輸入make命令編譯。LIBS=$(SUBLIBS)-L$(QTDIR)/lib-lqte-lm-lstdc++$make(5)啟動虛擬控制臺,運(yùn)行hello程序(主機(jī)須啟動幀緩沖,必須能夠訪問/dev/fb0)。$cd/zylinux/x86-qtopia$.set-env$cdhello$./hello–qws如果要將Hello程序發(fā)布到ARM板上運(yùn)行,還需進(jìn)行以下工作:(6)進(jìn)入/zylinux/arm-qtopia目錄,并將hello工程復(fù)制到當(dāng)前目錄下。$cd/zylinux/arm-qtopia$cp–av/zylinux/x86-qtopia/hello(7)運(yùn)行當(dāng)前目錄下的set-env文件,重新設(shè)置環(huán)境變量,進(jìn)入hello目錄,使用tmake工具,重新生成Makefile文件。$.set-env$cdhello$tmake-oMakefile(8)按照步驟(4)的方法修改包含庫,編譯,得到可執(zhí)行文件hello,將hello文件添加到文件系統(tǒng)中,更新文件系統(tǒng)。(9)插入U(xiǎn)SB鼠標(biāo)和USB鍵盤,啟動ARM板。啟動Qtopia的終端,運(yùn)行hello程序。利用同樣的編譯方法,客戶端QT程序進(jìn)行編譯和調(diào)試。2.1.1客戶端QT界面設(shè)計(jì)客戶端QT需要以下基本組件:(1)一個(gè)向前按鈕,一個(gè)向后按鈕以及循環(huán)按鈕。(2)制作一個(gè)圖片瀏覽器,能夠顯示某個(gè)文件中的圖片。(3)在圖片瀏覽器中增加下載更新,文件列表更新。(4)添加客戶端與服務(wù)器相連,實(shí)現(xiàn)下載和更新。2.2服務(wù)器端和客戶端的數(shù)據(jù)傳輸方式服務(wù)器端和客戶端的數(shù)據(jù)是用TCP套接字來傳輸?shù)?。IP地址表示Internet上的計(jì)算機(jī),端口號標(biāo)識正在計(jì)算機(jī)運(yùn)行的進(jìn)程。端口號與IP地址的組合得出一個(gè)網(wǎng)絡(luò)套接字。客戶端使用linuxC函數(shù)socket建立到服務(wù)器的套接字連接。當(dāng)套接字連接socket建立后,可以利用linuxC語言中的send函數(shù)和recv函數(shù)來實(shí)現(xiàn)簡單的發(fā)送和接收消息。2.3服務(wù)器端功能設(shè)計(jì)服務(wù)器沒有用QT來編寫界面,只是實(shí)現(xiàn)一個(gè)簡單的控制程序。服務(wù)器主要實(shí)現(xiàn)有:(1)創(chuàng)建套接字(2)對套接字、IP地址和端口號進(jìn)行綁定(3)進(jìn)行監(jiān)聽(4)等待客戶端的連接(5)對客戶端自動進(jìn)行連接并自動下載圖片到客戶端2.4客戶端功能設(shè)計(jì)客戶端使用QT設(shè)計(jì)界面,客戶端實(shí)現(xiàn)的功能如下:(1)創(chuàng)建套接字(2)連接服務(wù)器(3)實(shí)現(xiàn)圖片的瀏覽(4)自動下載服務(wù)器圖片
3.總體設(shè)計(jì)3.1總體功能根據(jù)對需求所做的分析,廣告自動更新系統(tǒng)需要實(shí)現(xiàn)的基本功能應(yīng)包括以下幾個(gè)方面:(1)在PC機(jī)上搭建FTP環(huán)境,建立FTP服務(wù)器。(2)服務(wù)器必須成功啟動。(3)QT編寫客戶端與服務(wù)器建立連接。(4)客戶端和服務(wù)器可以實(shí)現(xiàn)通信。(5)客戶端可自動下載FTP服務(wù)器上的圖片自動加載到瀏覽器上顯示。(6)利用QT設(shè)計(jì)界面,并下載到ARM板上面。使用QT設(shè)計(jì)的界面簡潔,大方,操作簡單,方便,容易上手,用戶可以快速掌握操作流程。開始界面開始界面圖片瀏覽默認(rèn)文件夾是否有文件不顯示圖片無顯示文件夾圖片有FTP服務(wù)器圖片有更新自動下載FTP服務(wù)器的圖片圖3.1總體設(shè)計(jì)流程圖
4.詳細(xì)設(shè)計(jì)4.1功能分析和描述廣告自動更新包括兩大功能模塊:客戶端和服務(wù)器端。具體實(shí)現(xiàn)的功能創(chuàng)建套接字、連接通信、客戶端從服務(wù)器自動下載圖片加載到圖形界面4.2客戶端功能模塊4.2.1連接服務(wù)器連接服務(wù)器之前需要解析服務(wù)器地址、創(chuàng)建套接字、設(shè)置sockaddr_in結(jié)構(gòu)體中相關(guān)參數(shù)。連接服務(wù)器連接服務(wù)器設(shè)置相關(guān)參數(shù)創(chuàng)建套接字解析服務(wù)器地址圖.2圖片下載功能連接功能是下載服務(wù)器圖片前必須進(jìn)行的步驟,連接成功之后,就可以進(jìn)行圖片下載了。圖片下載功能流程圖如圖2-5所示:是否連接成功是否連接成功無法下載圖片否從服務(wù)器上下載圖片是自動加載到圖形界面圖4.2.2圖片下載功能流程圖
4.3服務(wù)器功能模塊服務(wù)器的設(shè)計(jì)并沒有使用QT編寫界面,服務(wù)器端實(shí)現(xiàn)的功能有:創(chuàng)建套接字對套接字和IP地址進(jìn)行驗(yàn)證等待客戶端進(jìn)行連接對客戶端自動傳送圖片文件圖4.3創(chuàng)建套接字對套接字和IP地址進(jìn)行驗(yàn)證等待客戶端進(jìn)行連接對客戶端自動傳送圖片文件
5.代碼實(shí)現(xiàn)5.1客戶端代碼5.1.1QT圖片瀏覽器功能函數(shù)的實(shí)現(xiàn)向前翻的實(shí)現(xiàn):voidImageViewer::on_actionPrevious_triggered(){ if(currentFile==displayFiles.constBegin()) currentFile=displayFiles.constEnd(); currentFile--; DisplayImage(dirCurrent->absoluteFilePath(*currentFile)); UpdateUI();}向后翻的實(shí)現(xiàn):voidImageViewer::on_actionNext_triggered(){ currentFile++; if(currentFile==displayFiles.constEnd()) currentFile=displayFiles.constBegin(); DisplayImage(dirCurrent->absoluteFilePath(*currentFile)); UpdateUI();}顯示時(shí)間更新:voidImageViewer::displayTimerUpdate(){currentFile++;//currentFile指向下一張圖片if(currentFile==displayFiles.constEnd())//邊界檢查currentFile=displayFiles.constBegin();//顯示currentFile所指的圖片DisplayImage(dirCurrent->absoluteFilePath(*currentFile));UpdateUI();//更新圖片顯示區(qū)域automaticTimer->start(displaySpace*1000);//重啟定時(shí)器}循環(huán)播放的實(shí)現(xiàn):voidImageViewer::on_actionAutomaticPlay_triggered(){if(displayLoop==false)//如果不是循環(huán)播放模式{displayLoop=true;//設(shè)置為循環(huán)播放模式automaticTimer->start(displaySpace*1000);//啟動定時(shí)器//設(shè)置actionAutomaticPlay控件的圖標(biāo)為pause.pngactionAutomaticPlay->setIcon(QIcon(":/images/pause.png"));}else{displayLoop=false;automaticTimer->stop();//停止定時(shí)器//設(shè)置actionAutomaticPlay控件的圖標(biāo)為play.pngactionAutomaticPlay->setIcon(QIcon(":/images/play.png"));}}
5.1.2下載更新voidImageViewer::downloadUpdate(){downloadTimer->stop();if(fileList->topLevelItemCount()==advertisementCount){}else{QStringfileName;//QMessageBox::information(this,tr("topLevelItemCount"),QString("%1").arg(fileList->topLevelItemCount()));for(inti=0;i<fileList->topLevelItemCount();
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工廠電工雇傭合同范例
- 公司授權(quán)個(gè)人代表公司簽署協(xié)議3篇
- 公私合作采購合同3篇
- 網(wǎng)絡(luò)代銷協(xié)議合同范例
- 發(fā)包人承包人合同協(xié)議書3篇
- 勞動合同協(xié)議工作地點(diǎn)2篇
- 公共管理與政策制定培訓(xùn)合同范本3篇
- 租房水電合同范例
- 產(chǎn)地租賃合同模板3篇
- 農(nóng)村簡易橋梁合同范例
- 兒童青少年肥胖食養(yǎng)指南(2024年版)
- AI時(shí)代大學(xué)生創(chuàng)新創(chuàng)業(yè)導(dǎo)航智慧樹知到期末考試答案章節(jié)答案2024年西南大學(xué)
- DZ∕T 0336-2020 固體礦產(chǎn)勘查概略研究規(guī)范(正式版)
- 東方航空《內(nèi)部異地調(diào)動人員管理規(guī)定》
- 標(biāo)準(zhǔn)節(jié)流裝置計(jì)算
- 三管輪主管設(shè)備的維護(hù)周期(全)解讀
- 鋼結(jié)構(gòu)罩棚施工組織設(shè)計(jì)(共26頁)
- 電力變壓器計(jì)算單
- 清朝年號干支紀(jì)年對照表
- 菜么么收銀系統(tǒng)使用說明PPT課件
- 鋼軌超聲波探傷知識講解
評論
0/150
提交評論