📄 main.cpp
字号:
MessageBox(e->y()); return; int iWidth=width(); int iHeight=height(); QPainter painter; QPixmap tempimage(QSize(iWidth,iHeight)); //move in from left for(int i=0;i<iWidth;i++) { painter.begin(&tempimage); painter.fillRect(QRect(0,0,iWidth,iHeight),QBrush(white)); painter.drawPixmap(QPoint(i,0),image); painter.moveTo(i,0); painter.lineTo(0,iHeight); painter.end(); for(int j=0;j<111000;j++); bitBlt(this,QPoint(i,0),&tempimage); } painter.begin(&tempimage); painter.fillRect(QRect(0,0,iWidth,iHeight),QBrush(white)); painter.end(); bitBlt(this,QPoint(0,0),&tempimage); //blind hori int iPart=iWidth/20; for(int i=0;i<iPart;i++) for(int j=0;j<20;j++) { painter.begin(&tempimage); painter.drawPixmap(j*iPart+i,0,image,j*iPart+i,0,1,iHeight); for(int k=0;k<10000;k++); painter.end(); bitBlt(this,QPoint(0,0),&tempimage); } painter.begin(&tempimage); painter.fillRect(QRect(0,0,iWidth,iHeight),QBrush(white)); painter.end(); bitBlt(this,QPoint(0,0),&tempimage); //blind vert iPart=iHeight/10; for(int i=0;i<iPart;i++) for(int j=0;j<10;j++) { painter.begin(&tempimage); painter.drawPixmap(0,j*iPart+i,image,0,j*iPart+i,iWidth,1); for(int k=0;k<10000;k++); painter.end(); bitBlt(this,QPoint(0,0),&tempimage); } painter.begin(&tempimage); painter.fillRect(QRect(0,0,iWidth,iHeight),QBrush(white)); painter.end(); bitBlt(this,QPoint(0,0),&tempimage); }*/void CMyMainWnd::PaintLabels(QPainter* painter){ printf("waiting from gsemlabel\n"); sem_wait(&gsemlabel); //printf("Paint labels\n"); printf("prepare to paint\n"); PICLABELLIST* q=listhead; while(q) { //printf("list head:%d\n",q); //printf("new font\n"); //printf("print font size\n"); //printf("font size:%d\n",q->piclabel.FontSize); //printf("print end\n"); FILE* tempfile=fopen("templbl","w+b"); fwrite(q->piclabel.BmpFile,1,q->piclabel.BmpSize,tempfile); fclose(tempfile); QPixmap img("templbl"); if(img.isNull()) { printf("cant load bmp\n"); } else painter->drawPixmap(q->piclabel.Left,q->piclabel.Top,img); q=q->next; printf("print a label\n"); continue; QFont font("unifont",q->piclabel.FontSize); /*if(q->piclabel.FontStyle&1)*/ font.setBold(true); /*if(q->piclabel.FontStyle&2)*/ font.setItalic(true); //printf("set font style\n"); if(q->piclabel.FontStyle&4) font.setUnderline(true); //if(font.bold()) printf("bold\n"); //printf("fontstyle:%d\n",q->piclabel.FontStyle); //getchar(); //printf("set font\n"); painter->setFont(font); //printf("fontcolor:%d,left:%d,top:%d\n",q->piclabel.FontColor,q->piclabel.Left,q->piclabel.Top); //printf("set pen\n"); //painter->setPen((q->piclabel.FontColor&0xff)<<16 | (q->piclabel.FontColor&0xff00) | (q->piclabel.FontColor&0xff0000)>>16); //QString str=trUtf8(q->piclabel.chtitle); //printf("string:%s\n",q->piclabel.chtitle); //QString str=trUtf8(q->piclabel.chtitle); //painter->drawText(q->piclabel.Left,q->piclabel.Top,str); //QGbkCodec gbk; //QString str=gbk.toUnicode(q->piclabel.chtitle,strlen(q->piclabel.chtitle)); //wchar_t ch[100]; //memset(ch,0,100); //mbstowcs(ch,q->piclabel.chtitle); //QString str(ch,wcslen(ch)); //qWarning(QString::fromLocal8Bit(q->piclabel.chtitle)); //getchar(); //printf("draw text\n"); painter->drawText(q->piclabel.Left,q->piclabel.Top,QString::fromLocal8Bit(STR_MOUSEDOWN)); //painter->drawText(q->piclabel.Left,q->piclabel.Top,str); } //printf("paint over\n"); sem_post(&gsemlabel); //printf("back\n");}void CMyMainWnd::paintEvent(QPaintEvent* ){ printf("a paint event\n"); int iWidth=width(); int iHeight=height(); QPainter painter; printf("paint begin\n"); painter.begin(this); sem_wait(&semfilename); QPixmap image(filename); sem_post(&semfilename); if (!image.isNull()) { //printf("%f,%f\n",(float)iWidth/image.width(), (float)iHeight/image.height()); //m.scale((float)iWidth/image.width(),(float)iHeight/image.height()); //m.scale(0.5f,0.5f); //image=image.xForm(m); //printf("width:%d,height;%d",image.width(),image.height()); printf("begin to draw image\n"); painter.drawPixmap(0,0,image); printf("draw image end\n"); } //qImage.scale(iWidth/2,iHeight/2); //paint the currnet bmp //painter.drawPixmap(QPoint(0,0),image,QRect(0,0,-1,-1)); //bitBlt(this,0,0,&image,0,0,image.width(),image.height(),Qt::CopyROP ); printf("prant ip\n"); painter.setFont(QFont("unifont",24)); painter.setPen(red); painter.drawText(5,iHeight-40,QString(statestr)); painter.drawText(5,iHeight-30,QString(localip)); if (clicked) { //dhc 2008-1-1 alter codes relative clickevent //painter.drawText(iWidth-190,iHeight-50,QString::fromLocal8Bit(STR_MOUSEDOWN)); printf("paint clicked\n"); } else printf("not clicked\n"); painter.setPen(white); painter.drawText(7,iHeight-28,QString(localip)); printf("paint other\n"); if(picctrl.blhasfile) { if(picctrl.iplaytype==0) painter.drawPixmap(2,5,pixauto); else painter.drawPixmap(2,5,pixhand); } else { painter.drawPixmap(2,5,pixno); painter.drawText(25,5,QString("Found no pictures!")); } if (picctrl.blplaying) { if(picctrl.blpausing) painter.drawText(iWidth-100,iHeight-20,QString("Paused")); else painter.drawText(iWidth-100,iHeight-20,QString("Playing")); } //draw frame printf("paint frame\n"); painter.setPen(QPen(gray,3)); painter.drawRect(1,1,iWidth-1,iHeight-2); int j=0; painter.setPen(QPen(darkGray,1)); for(int i=iHeight-5;i<=iHeight;i++) { painter.setPen(black); painter.moveTo(0,i); painter.lineTo(iWidth,i); painter.setPen(darkGray); painter.moveTo(j++,i); painter.lineTo(iWidth,i); } j=0; for(int i=iWidth-5;i<=iWidth;i++) { painter.setPen(black); painter.moveTo(i,0); painter.lineTo(i,iHeight); painter.setPen(darkGray); painter.moveTo(i,j++); painter.lineTo(i,iHeight); } printf("prepare to paint label\n"); if (gShowLbl) PaintLabels(&painter); printf("end\n"); painter.end(); return;}void MessageBox(char* ch){ QMessageBox::warning(NULL,QString::fromLocal8Bit(ch),QString::fromLocal8Bit(ch)); printf("%s\n",ch);}void MessageBox(int i){ char ch[50]; memset(ch,0,50); //sprintf(ch,"%d,%x",i,i); //QMessageBox::warning(NULL,ch,ch); //printf("%s",ch);}int ParsePrj(char* prjfile){ printf("begin parsing prjfile\n"); printf("size of picbody:%d\n",sizeof(PICBODY)); memset(&picctrl,0,sizeof(picctrl)); picctrl.inumber=-1; PICPRJHEAD prjhead; PICBODY* pbody=NULL; int i=0; FILE* file=fopen(prjfile,"r+b"); if(!file) gotoerror("prjfile not exists\n"); picctrl.blhasfile=true; if(fread(&prjhead,1,sizeof(prjhead),file)!=sizeof(prjhead)) gotoerror("read prjhead error\n"); picctrl.iplaytype=prjhead.iPlayType; picctrl.ipiccount=prjhead.iPicCount; picctrl.iplaytype=prjhead.iPlayType; if(ppicbodyarr) delete [] ppicbodyarr; ppicbodyarr=new (PICBODY*)[prjhead.iPicCount]; printf("now,begining parsing....\n"); pbody=new(PICBODY); for(i=0;i<prjhead.iPicCount;i++) { pbody=new(PICBODY); if(fread(pbody,1,sizeof(PICBODY),file)!=sizeof(PICBODY)) { delete pbody; gotoerror("parse bmp info error\n"); } ppicbodyarr[i]=pbody; printf("delaytime:%d\n",pbody->iDelayTime); if((i==prjhead.iPicCount-1)&&pbody->iNextPic==-1) { pbody->iNextPic=0; } //printf("bmp info:title:%s\n",\ pbody->chTitle); //printf("bmp size:%d\n",pbody->iSize); //printf("bmp next:%d\n",pbody->iNextPic); } //delete pbody; return 1;_error: if(ppicbodyarr) delete ppicbodyarr; ppicbodyarr=NULL; //if (pbody) delete pbody; if(file) fclose(file); return -1;}void * udpclient(void *){ int sock=socket(AF_INET,SOCK_DGRAM,0); //int timeo=3000; if(sock==-1) return NULL; struct sockaddr_in addr; memset(&addr,0,sizeof(struct sockaddr_in)); addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family=AF_INET; addr.sin_port=htons(7010); if(bind(sock,(struct sockaddr*)&addr,sizeof(struct sockaddr))==-1) return NULL; struct timeval timeout; timeout.tv_sec=1; timeout.tv_usec=0; setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)); int recvlen,clientsock; char recvbuff[2000]; bool recving=false; FILE* pfile=NULL; int hasrecv=0; char* bitarr=NULL; int packcount=0; struct sockaddr_in addrsvr; socklen_t addrlen=0; int failcount=0; for(;;) { _recvcode: if((recvlen=recvfrom(sock,recvbuff,2000,0,(struct sockaddr*)&addrsvr,&addrlen))>0) { if (recvlen>0) { if(failcount) failcount=0; if(!PBROADCASTHEAD(recvbuff)->iflag) continue; if(!recving) { if(PBROADCASTHEAD(recvbuff)->itotalsize>0) { pfile=fopen(PBROADCASTHEAD(recvbuff)->chfilename,"w+b"); char* ptemp=new char[PBROADCASTHEAD(recvbuff)->itotalsize]; fwrite(ptemp,1,PBROADCASTHEAD(recvbuff)->itotalsize,pfile); packcount=(PBROADCASTHEAD(recvbuff)->itotalsize+PACKSIZE-1)/PACKSIZE; printf("filename:%s\n",PBROADCASTHEAD(recvbuff)->chfilename); recving=true; hasrecv=0; bitarr=new char[packcount]; memset(bitarr,0,packcount); } else { mainwindow->ResetPaint(); continue; } } printf("recv size:%d,totalsize:%d,ipos:%d\n",recvlen,PBROADCASTHEAD(recvbuff)->itotalsize,PBROADCASTHEAD(recvbuff)->ipos); //if( PBROADCASTHEAD(recvbuff)->ipos<5&&test) continue; printf("udp recvlen:%d\n",hasrecv+=recvlen-sizeof(BROADCASTHEAD)); *(bitarr+PBROADCASTHEAD(recvbuff)->ipos)=1; fseek(pfile,PBROADCASTHEAD(recvbuff)->ipos*1024,SEEK_SET); fwrite(recvbuff+sizeof(BROADCASTHEAD),1,recvlen-sizeof(BROADCASTHEAD),pfile); } } else {//recv len<0 //printf("failcount:%d,pack count:%d,recvcount:%d\n",failcount,packcount,recvlen); failcount++; if(recving) { if(failcount<5) for(int i=0;i<packcount;i++) { printf("pos:%d,%d",i,*(bitarr+i)); if(!*(bitarr+i)&&addrlen)//we has known the server addr { printf("pos:%d was lost\n",*(bitarr+i)); int socksnd=socket(PF_INET,SOCK_DGRAM,0); printf("send pos%d\n",i); BROADCASTHEAD head; memset(&head,0,sizeof(BROADCASTHEAD)); head.iflag=0; head.ipos=i; struct sockaddr_in socksvr; memcpy(&socksvr,&addrsvr,sizeof(struct sockaddr_in)); socksvr.sin_port = htons (7011); if(-1==sendto(socksnd,&head,sizeof(BROADCASTHEAD),0,(sockaddr*)&socksvr,sizeof(struct sockaddr_in))) { printf("send error\n"); break; } //usleep(10000); close(socksnd); goto _recvcode; } } //printf("recv suc\n"); fclose(pfile); mainwindow->SetCurrentFileName("ppt.bmp"); mainwindow->repaint(true); pfile=NULL; recving=false; } } } close(sock); return NULL;}int recvprj(int sock,int ilen){ REQCMD reqcmd; ACKCMD ackcmd; char* buff=new char[ilen]; char* bmpbuff=NULL; PICPRJHEAD* phead=NULL; char statestr[50]; char bmpname[10]; if(recvn(sock,buff,ilen)==-1) gotoerror("error where recv prj file\n"); memset(&ackcmd,0,sizeof(ackcmd)); if(sendfail(sock,&ackcmd,sizeof(ackcmd))) gotoerror("error when send ack\n"); phead=(PICPRJHEAD*)buff; printf("piccount:%d,playtype:%d,size:%d",phead->iPicCount,phead->iPlayType,phead->iSize); for(int i=0;i<phead->iPicCount;i++) { printf("prepare to recv bmp %d\n",i); sprintf(statestr,"receiving picture:%d/%d",i+1,phead->iPicCount); mainwindow->SetStateStr(statestr); memset(&reqcmd,0,sizeof(reqcmd)); if(recvfail(sock,&reqcmd,sizeof(reqcmd))) gotoerror("error when recv bmp req\n"); bmpbuff=new char[reqcmd.nextdatalen]; if(recvn(sock,bmpbuff,reqcmd.nextdatalen)==-1) gotoerror("error when recv bmp file\n"); if(sendfail(sock,&ackcmd,sizeof(ackcmd))) gotoerror("error when send bmp ack\n"); memset(bmpname,0,10); sprintf(bmpname,"%d.bmp",i); savefile(bmpname,bmpbuff,reqcmd.nextdatalen); delete bmpbuff; bmpbuff=NULL; printf("recv bmp:%d succ\n",i); } savefile(prjfilename,buff,ilen); ParsePrj(prjfilename); if(buff) delete buff; return 1;_error: if (buff) delete buff; if(bmpbuff) delete bmpbuff; return -1;}void * PicManageThread(void* pparam){ char chbmpname[20]; PICBODY* pbody; int idelay=0,i; //int fdfifo,fdfifoblock; int chcmd; int retid; struct message msg; int icount=0; //if (parseprj(prjfilename)==-1) // gotoerror("parse prj failed\n"); if(!picctrl.blhasfile) gotoerror("term has no prj\n"); if(!picctrl.ipiccount) gotoerror("prj has no files\n"); //show first file picctrl.inumber=0; picctrl.blplaying=true; picctrl.blpausing=false; printf("begin playing \n"); switch (picctrl.iplaytype) { case 0://auto {_autoplay: printf("count:%d\n",icount++); printf("**********************************************************************\n"); memset(chbmpname,0,20); pbody=ppicbodyarr[picctrl.inumber]; printf("now playing bmp:%d,delay time is %d second\n",picctrl.inumber,pbody->iDelayTime); printf("title:%s,delaytime:%d,isize:%d,inextpic:%d\n",pbody->chTitle,pbody->iDelayTime,pbody->iSize,pbody->iNextPic); sprintf(chbmpname,"%d.bmp",picctrl.inumber); //printf(chbmpname); mainwindow->ShowPic(chbmpname,pbody->iMoveinType); idelay=pbody->iDelayTime*100; for(i=0;i<idelay;i++) { //printf("delay:%d:%d\n",i,idelay); // printf("open pipe to read\n"); if(!picctrl.blpausing) retid=msgrcv(msglistid,&chcmd,0,0,IPC_NOWAIT); else retid=msgrcv(msglistid,&chcmd,0,0,0); // printf("msg return\n"); if(retid>=0) { printf("recv cmd:%d\n",chcmd); switch(chcmd) { case PICBEGINPLAY: { printf("beign\n"); sem_wait(&gsem);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -