湖北汽院嵌入式系統(tǒng)開發(fā)實驗_第1頁
湖北汽院嵌入式系統(tǒng)開發(fā)實驗_第2頁
湖北汽院嵌入式系統(tǒng)開發(fā)實驗_第3頁
湖北汽院嵌入式系統(tǒng)開發(fā)實驗_第4頁
湖北汽院嵌入式系統(tǒng)開發(fā)實驗_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗二嵌入式Linux多線程通信實驗程(thread)是在共享內(nèi)存空間中并發(fā)的多道執(zhí)行路徑,它們共享一個進程的資源,如文件描述和信號處理。P(S):將信號量S的值減1,即S=S-1;如果S>0,則該進程繼續(xù)執(zhí)行;否則該進程狀態(tài)置為阻塞狀態(tài),進程PCB排入信號量PCB隊列末尾,放棄CPU,等待V操作的執(zhí)行。V(S):1將信號量S的值加1,即S=S+1;2如果S<0,釋放信號量隊列中第一個PCB所對應(yīng)的進程,將進程狀態(tài)111阻塞態(tài)改為就緒態(tài)。執(zhí)行V操作的進程繼續(xù)執(zhí)行。#include<stdio.h>#include<unistd.h>#include<pthread.h>#include<semaphore.h>#defineMAXSIZE10intstack[MAXSIZE];intsize=50;intfront=-l,rear=0;seni.tavail,full;//avail表示可用的空緩沖區(qū),full表示已存放產(chǎn)品的緩沖區(qū)〃生產(chǎn)者pthread_tprovider,customer,end;voidprovider_fun(void)//full表示已存放產(chǎn)品的緩沖區(qū){inti=l;sleep(5);while(i<=size)〃生產(chǎn)50個產(chǎn)品,需要放入到MAXSIZE個緩沖區(qū)中{sem_wait(&avail);//avail信號EP操作,表示將可用的空緩沖區(qū)個數(shù)減1stack[rear]=i;printf('*producethe%dproduct\nn,stack[rear]);rear=(rear+l)%MAXSIZE;i++;sleep(l);sem_post(&full);//full信號量V操作,表示將存放產(chǎn)品的緩沖區(qū)個數(shù)加1}pthread_exit(NULL);}〃消費者voidcustomer_fun(void)inti=l;while(i<=size){sem_wait(&full);//fulll信號量P操作,表示將存放產(chǎn)品的緩沖區(qū)個數(shù)減1front=(front+l)%MAXSIZE;printf(H\tconsumethe%dproduct\n,\stack[front]);stack[front]=0;sleep(2);sem_post(&avail);//avail信號量V操作,表示將可用的空緩沖區(qū)個數(shù)加1i++;}pthread_exit(NULL);}voidend_fun(void){charch;scanf(,,%c',,&ch);pthread_cancel(provider);pthread_cancel(customer);dpthread_exit(NULL);printf(nexit!\iin);}voidmain(){pthread_tprovider,customer;〃定義生產(chǎn)者線程對象和消費者線程對象sem_init(&avail,O,MAXSIZE);〃將avail信號量初始化為MAXSIZEsemJnit(&full,0,0);〃將full信號量初始化為0pthread_create(&provideF,NULL,(void*)provider_fun,NULL);//創(chuàng)建生產(chǎn)者線程pthread_create(&customer,NULL,(void*)customer_fun,NULL)”/消費者線程pthread_create(&end,NULL,(void兔)end_fun,NULL);pthread」oin(provider,NULL);pthread」oin(customer,NULL);pthread」oin(end,NULL);sem_destroy(&a、ail);sem_destroy(&full);}實驗三'嵌入式Linux網(wǎng)絡(luò)通信實驗3、TCP套接字通信步驟服務(wù)器端:調(diào)用socketQ創(chuàng)建套接字,然后初始化stnictsockaddr_m結(jié)構(gòu)體。調(diào)用bind函數(shù)()為套接字綁定一個IP地址和一個端II號。

調(diào)用listenQ^數(shù)使套接字成為監(jiān)聽套接字,偵聽指定的端II。調(diào)用accept()函數(shù),使服務(wù)器處于阻塞狀態(tài),等待接受客戶端連接請求。一旦建立連接,將產(chǎn)生新的套接字,此時就有兩個套接字了,原來的那個套接字還在監(jiān)聽等待指定的端II,而新產(chǎn)生的套接字則準備發(fā)送或接受數(shù)據(jù)。利用sendz,sendto和recv/recvfiom進行數(shù)據(jù)傳輸。當然也可以調(diào)用write或read.數(shù)據(jù)傳輸完畢,關(guān)閉套接字。請補充server.c中代碼//fbwuqi#include<svs/tvpes.h>#include<svs/socket.h> //包含套接字函數(shù)庫#iiiclude<stdio.h>#include<netinet/in.h>#include<arpa;inet.h>#include<unistd.h>#include<netinet/in.h>#include<arpa;inet.h>#include<unistd.h>//包含AF.INET相關(guān)操作的函數(shù)^include<string.h> //bzeio()#defineMAXDATASIZE50mt〃服務(wù)器端socket〃服務(wù)器端socket描述符變量,用以監(jiān)聽客戶端hitseivei_sockfd;的TCP連接stmctsockaddi_iiisenTei_addr;stmctsockaddrmclientaddr;intclient_addi_len;acceptQ中的一個參數(shù)chai-bufIMAXDATASIZE];〃服務(wù)器端sockaddr_in的數(shù)據(jù)結(jié)構(gòu)〃用于accept()存放客戶端的socket數(shù)據(jù)結(jié)構(gòu)〃用于返回structsockaddr_iii的長度,作為〃創(chuàng)建一個buf來存放接受的數(shù)據(jù)intnumbytes;〃用以返回接受到的字節(jié)數(shù)intnew_sockfd;返回一個新的socket,用這個socket接受數(shù)據(jù)〃當監(jiān)聽到并接受一個TCP連接時,acceptQseiver.sockfd=sock戰(zhàn)(AF_INET,SOCK_STREAM,0);〃創(chuàng)建一個TCP套接字,其中協(xié)議族為AF_INET,套接字類型為SOCK_STREAM,第三個參數(shù)為0servei_addi.sin_fomily=AF_INET;//servrei_addr.sin_faniily為AF_INETsenrer_addr.siii_addr.s_addr=iiiet_addr(M10.10.58.130n);//senrer_addr.siii_addr.s_addr為服務(wù)器端IP地址,需經(jīng)inet_adck()轉(zhuǎn)化為網(wǎng)絡(luò)IP字節(jié)序senrer_addLsm_pon=htons(1025);//servrei_addr.sin_poil為一個人于1024的端I丨號,需經(jīng)htoiis()轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序bmd(senTer_sockfd.(stRictsockaddr *)&server_addi\sizeof(stnictsockaddi));//將senrei_sockfd綁定到seiver_addr指定的IP和端II上listen(serv“_sockfd,5);將其設(shè)置為監(jiān)聽套接字〃為servei_sockfd創(chuàng)建包含5個TCP連接的監(jiān)聽隊歹listen(serv“_sockfd,5);將其設(shè)置為監(jiān)聽套接字wlule(1){client_addi_len=sizeof(sti-uctsockaddi_in);//計算sockaddi_iii的長度new_sockfd=accept(senrer_sockfd,(stnictsockaddr*)&client_addi;&ni】mbytes);〃等待接受客戶端發(fā)來的TCP連接,若連接成功,返回新的socketnumbytes=recv(new_sockfd,buf,20,0);〃將客戶端發(fā)來的數(shù)據(jù)存放在buf中,返回接

受到的字節(jié)數(shù)if(numbytes){prmtf(n%s\ir\buf);//輸出buf中數(shù)據(jù)}sleep⑶;send(new_sockfd/Iamserver*,20.0); 〃向客戶端發(fā)送TamseiveiMclose(new_sockfd);if(8==getchar()){break;}}close(seiver_sockfd);leturn0;}客戶端:調(diào)用socket()創(chuàng)建套接字,然后初始化structsockaddr_m結(jié)構(gòu)體,注意服務(wù)器端和客戶端的structsockaddr_m結(jié)構(gòu)體應(yīng)該一致。調(diào)用coimectionQ函數(shù)與服務(wù)器建立連接。利用send/sendto和recv/recvfiom進行數(shù)據(jù)傳輸.當然也可以調(diào)用write或read.數(shù)據(jù)傳輸完畢,關(guān)閉套接字。請補充client.c中代碼#include<svs/tvpes.h>#include<svs/tvpes.h>#include<svs/socket.h>#include<stdio.h>#include<netmet*m.h>#include<arpa;inet.h>#include<unistd.h>#include<string.h>//包含套接字函數(shù)庫//包含AF_INET相關(guān)結(jié)構(gòu)//包含AF.INET相關(guān)操作的函數(shù)//bzero()^defineMAXDATASIZE50iiit argc,char*argv[])iiitsockfd,result;//客戶端socket描述符變量stmctsockaddi_iiisenTei_addr;//與服務(wù)器端sockaddi_iii的數(shù)據(jù)結(jié)構(gòu)一致chai-buftMAXDATASIZE];〃用以接受服務(wù)器端發(fā)送過來的數(shù)據(jù)mtnumbytes;〃用以返回從服務(wù)端發(fā)送過來的數(shù)據(jù)字節(jié)數(shù)sockfd=sock筑(AF_INET$OCK_STREAK0);〃創(chuàng)建一個TCP套接字,其中協(xié)議族為AF_INET、套接字類型為SOCK_STREAM.第三個參數(shù)為0seiver^addr.siii.fanuly=AF_INET;//addiess_addr_addr.sm_family為AF_INETsenrer_addi.siii_addr.s_addi = met_addi(M10.10.58.130M);//address_addi_addf.siii_addi-.s_addr為服務(wù)器端IP地址,需經(jīng)met_addr()轉(zhuǎn)化為網(wǎng)絡(luò)IP字節(jié)序senrer_addr.siii_pon=htons(1025);//addiess_addi_addr.sin_port為一個人于1024的端丨I號,需經(jīng)htons()轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序result=conn亡ct(sockfd,(structsockaddi*)&seiver_addi\sizeof(stRictsockaddi));//與address_addi_addf指定的服務(wù)器建立連接send(sockfd,Mthisisclient”,20,0);//向服務(wù)器端發(fā)送”thisisclient*'sleep⑶;numbytes=recv(sockfd.buf,50,0);〃接受服務(wù)器端發(fā)送過來的數(shù)據(jù),保存在buf中if(numbvtes){pi-rntfC"%s\ir\buf);//輸出buf里面的數(shù)據(jù)}close(sockfd);leturn0;}實驗四、嵌入式Linux串行端口編程實驗什么是全雙工和半雙工全雙工(Fullduplex)是說計算機可以同時接受和發(fā)送數(shù)據(jù)——也就是它有兩個分開的數(shù)據(jù)傳輸通道(一個傳入,一個傳出)。半雙工(Halfduplex)表示計算機不能同時接受和發(fā)送數(shù)據(jù),而在某一時刻它只能單一的傳送或者接收。這通常意味著,它只有一個數(shù)據(jù)通道。半雙工并不是說RS-232的某些信號不能使用,而是,它通常是使用了有別于RS-232的其他不支持全雙工的標準。#iiiclude<stdio.h>/*標準輸入輸出定義*/include<stdlib.h>/*標準函數(shù)庫定義*/#iiiclude<uiiistd.h>/*Unix標準函數(shù)定義*/iiiclude<sys/types.h>iiiclude<sy&/stat.h>include<fcntl.h>/*文件控制定義*/#iiiclude<terniios.h>/*PPSIX終端控制定義*/iiiclude<enno.h>/*錯誤號定義*/#defineFALSE-1^defineTRUE0mtspeed_an[]={B38400,Bl9200,B9600.B4800,B2400,B1200.B300,B38400.B19200.B9600,B4800.B2400,B1200,E300,};mtname_an[]={38400, 19200,9600,4800.2400, 1200, 300、38400. 19200,9600,4800,2400.1200,300,};charbuff珥1024];iiitLength;//intnByt亡=wiite(fd,buffer’Length);〃讀取串口數(shù)據(jù)代碼:dcharbuff[1024];iiitLen;voidset_speed(iiitfd,iiitspeed){inti;intstatus;stmctterniiosOpt;tcgetattr(fd,&Opt);for(i=0:i<sizeof(speed_air)/sizeof(int);i++){if(speed=name_an[i]){tcflush(fd,TCIOFLUSH);cfsetispeed(&Op「speed_an[i]);cfsetospeed(&Opt、speed_an[i]);status=tcsetattr(fd.TCSANOW.&Opt);if(status!=0){perror(HtcsetattrfdlH);return;}tcflush(fd.TCIOFLUSH);mtset_Parity(intfd.iiitdatabits.mtstopbits.mtparity)stmctterniiosoptions;if(tcgetattr(fcl&options)!=0){perior(nSetupSerial1H);retuni(FALSE);}options.c_cflag&=?CSIZE;switch(databits)/*設(shè)置數(shù)據(jù)位數(shù)*/case7:options.c_cflag|=CS7;break;case8:options.c_cflag|=CSS;break;default:fprmtf(stden\HUnsuppoiteddatasize\nM);return(FALSE);}switch(parity)

casen:caseN:options.c_cflag&=~PARENE; /*Clearparityenable*/options.c_iflag&=~INPCK; /*Enableparitychecking*/break;caseV:case'O:options.c.cflag|=(PARODD|PARENB);/*設(shè)置為奇效驗勺options.c_iflag|=INPCK; /*Disnableparitychecking*/break;case*er:/*Enableparity*//*/*Enableparity*//*轉(zhuǎn)換為偶效驗*//*Disnableparitychecknig*/options.c_cflag|=PARENB;options.c_cflag&=~PARODD;options.c_iflag|=INPCK;break;case’s:case's1:/*asnoparity*/options.c_cflag&=~PARENE;options.c.cflag&=-CSTOPB;break;default:fprmtf(stden\”UnsupportedparityuiH);return(FALSE);}/*設(shè)置停止位*/switch(stopbits)fcase1:options.c_cflag&=?CSTOPE;break;case2:options.c_cflag|=CSTOPB;break;default:fprmtf(stden\nUnsuppoitedstopbits?”);return(FALSE);}/*Setmputparityoption*/if(parity!=fnf)options.c_iflag|=INPCK;tcflush(蝕TCIFLUSH);options.c_cc[VTEvIE]=150;/*設(shè)置超時15seconds*/options.c_cc[V\nN]=0:/*UpdatetheoptionsanddoitNOW*/if(tcsetatti(fd,TCSANOW,&optious)!=0){penorC'SetupSerial3H);return(FALSE);}retuin(TRUE);}iiitOpeiiDev(chai*Dev){mtfd=open(Dev,O_RDWR); //|O.NOCTTY|O_NDELAYif(-l=fd){penor(HCairtOpenSerialPort”);return-1;}elsereturnfd;}iiit aigc,chai**arg\-){mtfd;intmead;clwbuff{1024];chai-*dev=n/dev/ttvUSB0H;〃串II二fd=OpeiiDev(dev);set_speed(fdjl5200);if(set_Paiity(fd58,l,N)==FALSE){prmtf<nSetParityEnor\nM);exit(0);}while(1)//循壞讀取數(shù)據(jù){memset(buflF,0,1024);while((nread=read(fd,buff.1024))>0){//printf(M\nLen%d\nHaiiead);bufftnread+1]=SO:buff);memset(buff.0,1024);}}close(fd);exit(0);}實驗五、嵌入式Linux內(nèi)核編程實驗?zāi)憧梢允褂妙^文件linux/fs.h中的函數(shù)registei_cludev來實現(xiàn)注冊一個某個驅(qū)動模塊對應(yīng)的主設(shè)備號。registei_cludev一般在intdevice_niitQ函數(shù)中調(diào)用,即將內(nèi)核驅(qū)動模塊加載入內(nèi)核意味著要向內(nèi)核注冊自己。如果你向函數(shù)registei_cludev傳遞為0的主設(shè)備號,那么返回的就是動態(tài)分配的主設(shè)備號。此時應(yīng)該通過命令“cat/proc/devices”命令輸出得到,使用mknod統(tǒng)調(diào)用建立設(shè)備文件。Linux的驅(qū)動程序編譯方法將其源代碼添加到內(nèi)核源文件中,然后靜態(tài)編譯整個內(nèi)核,再運行新的內(nèi)核來測試編譯為模塊的形式,單獨加載運行調(diào)試驅(qū)動程序與應(yīng)用程序的區(qū)別應(yīng)用程序一般有一個main函數(shù),從頭到尾執(zhí)行一個任務(wù);驅(qū)動程序卻不同,它沒有main函數(shù),通過使用宏module_init(初始化函數(shù)名);將初始化函數(shù)加入內(nèi)核全局初始化函數(shù)列表中,在內(nèi)核初始化時執(zhí)行驅(qū)動的初始化函數(shù),從而完成驅(qū)動的初始化和注冊,之后驅(qū)動便停止等待被應(yīng)用軟件調(diào)用。驅(qū)動程序中有一個宏moudule_exit(^出處理函數(shù)名)注冊退出處理函數(shù)。它在驅(qū)動退出時被調(diào)用。應(yīng)用程序可以和GLIBC庫連接,因此可以包含標準的頭文件,比如<stdio.hxstdhb.h>,在驅(qū)動程序中是不能使用標準C庫的,因此不能調(diào)用所有的C庫函數(shù),比如輸出打印函數(shù)只能使用內(nèi)核的pimtk函數(shù),包含的頭文件只能是內(nèi)核的頭文件,比如:<lmuxy'module.h>。字符驅(qū)動程序編寫流程包含字符設(shè)備驅(qū)動程序所必需包含的頭文件定義字符設(shè)備文件名、主設(shè)備號或由系統(tǒng)動態(tài)分配設(shè)備號編寫file_operatioiis結(jié)構(gòu)體中功能接丨I函數(shù),如以上device_read、device_\vrite.device_open定義file_opeiations結(jié)構(gòu)變量,建立用戶程序調(diào)用函數(shù)與驅(qū)動功能接II的對應(yīng)關(guān)系。編寫字符設(shè)備驅(qū)動程序加載函數(shù),完成設(shè)備文件注冊及必要的初始化編寫字符設(shè)備驅(qū)動程序卸載函數(shù),完成注銷及必要的環(huán)境恢復(fù)。編寫Makefile文件,使用make來編譯Makefile,生成****.ko內(nèi)核模塊文件使用“insmod***.ko”加載設(shè)備驅(qū)動程序,并調(diào)用dmesg來查看輸出結(jié)呆使用“cat/pioc/devicesv查看獲取主設(shè)備號使用“mknod/dev/設(shè)備文件名主設(shè)備號0”來創(chuàng)建設(shè)備文件編寫用戶應(yīng)用程序,調(diào)用用戶調(diào)用接II對驅(qū)動功能接II進行測試。使用“rmmod/dev/設(shè)備文件名”卸載驅(qū)動模塊,并調(diào)用dmesg查看#include<linux'fs.h>#include<linux-cdev.h>#include<asnruaccess.h>〃文件系統(tǒng)相關(guān)的函數(shù)和頭文件#include<linux'fs.h>#include<linux-cdev.h>#include<asnruaccess.h>#defineDEVICE_NAMEmtDEVICE.MAJOR=0;MDev_fiaiiieM〃定義模塊名,用"cat/pioc/devicesv命令查看〃如果為0,則由系統(tǒng)自動分配主設(shè)備號#defineM_LENGTH10charcore_dataO[M-LENGTH][M.LENGTH];〃定義內(nèi)核數(shù)據(jù)矩陣charcore.data1[M_LENGTH][M_LENGTH];//hitdevice_open(stmctinode*inode,structfile*filp){charc-ar;mti,j;printk(nuseropendevice.\iiH);for(i=0;i<M_LENGTH;i++){ 〃初始化數(shù)據(jù)foi(j=Oj<M_LENGTH:j++){core_dataO[i][j]=c+j; 〃初始化內(nèi)核數(shù)據(jù)矩陣}}return0:}/* */ssize_tdevice_write(stmctfile*filp.constchar*buffei;size_tcount,loff_t*f_pos){intij;printk(nuserwritedatatodrive匚\1】");〃將用戶空間傳遞過來buffer里面的數(shù)據(jù)復(fù)制到內(nèi)核空間core_datal數(shù)組中copy^fionvuseiXbuffer.core.data1.count);for(i=0;KM_LENGTH:i++){fbr(j=Oj<M_LENGTHj++){piintkC%c"、coie_daUil[i]);//使用printk打印內(nèi)核空間coie_datal數(shù)組中元素}pnntk(n\iiH);}returncount;}/* */ssize_tdevice_read(stmctfile*filp,char*buffer,size_tcount,loff.t*flpos){printk(nuserreaddatafromdrivec\n");copy_to_user(buffer,core_dataO,count)^/將內(nèi)核空間coie_dataO數(shù)組復(fù)制到用戶空間bufferreturncount;/* */iiitdevice_ioctl(stnictinode*iiiode,stmctfile*file.unsignedintcmd.unsignedlongarg){printk(nuserloctlruning.S”);switch(cmd){case1:prmtk(ncmd=%d.\ir\cmd);break;case2:prmtk(ncmd=%d.\ir\cmd);break;case3:prmtk(ncmd=%d.\ir\cmd);break;case4:prmtk(ncmd=%d.\ir\cmd);break;case5:prmtk(ncmd=%d.\ir\cmd);break;}returncmd;}/* */iiitdevice_release(stiuctmode*iiiode,structfile{printk(ndevicerelease\nH);return0;}/*----device_fops結(jié)構(gòu)定義文件操作函數(shù)體之后- -*/structfile_opeiationsdevice_fbps={.owner-THIS_MODULE,.iead=device_iead,//W用戶接II函數(shù)read與驅(qū)動功能函數(shù)device_read對應(yīng)起來.unlocked_ioctl=device_ioctl,〃將用戶接I丨函數(shù)ioctl與驅(qū)動功能函數(shù)device_ioctl對應(yīng)起來.open=device_open,〃將用戶接II函數(shù)open與驅(qū)動功能函數(shù)device_open對應(yīng)起來.write=device_write,〃將用戶接II函數(shù)write與驅(qū)動功能函數(shù)device_write對應(yīng)起來.Telease=device_Telease//將用戶接I丨函數(shù)release與驅(qū)動功能函數(shù)device_release對應(yīng)起來};/* */iiitdevice_uut(void){intret;/*字符驅(qū)動程序注冊:第1個參數(shù)為0(表示由系統(tǒng)自動分配主設(shè)備號),第2個參數(shù)為設(shè)備文件名,第3個參數(shù)為stmctfile_opeiations結(jié)構(gòu)體變量指針*/iet=register_cludev(0/Demo_device,\&devic亡_fops);if(ret<0){priiitkCregisterchidevfailure!\n”);〃字符驅(qū)動程序注冊失敗returnret;piiiitk(Hregisterchidevok!\iT');DEVICE_MAJOR=ret;〃將系統(tǒng)分配的主設(shè)備號保存}return0;}voiddevice_exit(void){〃字符驅(qū)動程序注銷,第1個參數(shù)為主設(shè)備號,第2個參數(shù)為設(shè)備文件名,umegistei_clndev(0/,Demo_deviceM);printk(numegistercludevok!\iiH);}module_init(device_iiiit); 〃指定insmod-加載時執(zhí)行device^initmodule_exit(device_exit); //rnunod-卸載時執(zhí)行執(zhí)行device_exit實驗六、嵌入式LinuxQtGUI使用實驗//firstDialog?cpp//#include<QtGui>#include"firstDialog.h”firstDialog::fiistDialog(QWidget*parent):QDialog(paient){liiieEdit_l=newQLineEdit;label_l=newQLabel(H+");lineEdit_2=newQLmeEdit;label_2=newQLabel(',=M);liiieEdit_3=newQLineEdit;suniButton=newQPushButton(MsumH);jianfaButton=newQPushButton(1fjiaiifaM);/*按鈕部件大小和字體設(shè)置*/suniButton->resize(50,20);suniButton->setFont(QFont(MTimes,\1&QFont::Bold));coiinect(suniButton,SIGNAL(clicked())、this.SLOT(clickhm()));comiect(this.SIGNAL(sunisignal(QStrmg,QStnng)).this,SLOT(sumfun(QStnng,QStimg)));

comiect(jianfiuiButton.SIGNAL(clickedQ),tliis,SLOT(clickfxm()));coiinect(tlus, SIGNAL(sunisignal(QStrmg,QStiing)),SLOT(jianfuii(QString,QStiiiig)));QHBoxLavout*topLayout=newQHBoxLayout;topLayout->addWidget(lineEdit_l);topLayout->addWidget(label_l);topLayout->addWidget(lineEdit_2);topLayout->addWidget(label_2);topLayout->addWidget(lineEdit_3);QHBoxLavout*bottoniLayout=newQHBoxLavout;bottoniLayout->addWidget(suniButton);bottoniLayout->addWidge

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論