资源描述:
《qt中多线程类qthread的介绍和使用方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、qt中多线程类qthread的介绍和使用方法单线程的(采集–>压缩–>解压–>发送–>接收–显示),用timer来刷新视频播放窗口,现在正在研究多线程(代码还在整理中),以后再换成多线程(用qt4的多线程,因为qt4的线程继承于QObject的,线程间可以使用signal-slot机制通信),建议先看看“linux下的tv播放器.doc(网上的资料)” 一.把视频显示到界面的方法(1)针对qt4的(视频格式为rgb32) v4l_grab_movie(&v4l_dev); unsignedchar*pBuf
2、fer=v4l_dev.buffer; QImageimage(pBuffer,320,240,QImage::Format_RGB32); QPixmappixmap; pixmap=pixmap.fromImage(image); label->setPixmap(pixmap); label->setFixedSize(pixmap.width(),pixmap.height()); (2)针对qt3的 1)格式为rgb32的QImage*img;unsignedchar*bit=image;setWF
3、lags(getWFlags()
4、Qt::WRepaintNoErase);img=newQImage((uchar*)bit,MAX_WIDTH,MAX_HEIGHT,32,NULL,0,QImage::IgnoreEndian);bitBlt(this,0,0,img); 2)格式为rgb24的 intx,y; inti=0; #if0 QLabel*label_time; QTimetime=QTime::currentTime(); label_time=newQLabe
5、l(time.toString(),this,“label_time”); label_time->setGeometry( 5,250,160,31 ); label_time->setAlignment( QLabel::AlignCenter ); #endif v4l_grab_movie(&v4l_dev); QStringa; QStringd; QImageimg; unsignedchar*bit=v4l_dev.buffer;
6、 QRgb*point; intr,g,b; QPainterpaint; //该步很重要,设置标志 //让QWidget在更新窗体时,不擦除原来的窗体 //这样可以避免闪屏 setWFlags(getWFlags()
7、Qt::WRepaintNoErase); if(img.create(MAX_WIDTH,MAX_HEIGHT,32,0,QImage::IgnoreEndian)) { for(y=0;y8、 for(x=0;x9、 } } paint.begin(this); QDatedate=QDate::currentDate(); d=date.toString(); QTimetime=QTime::currentTime(); a=time.toString(); paint.drawImage(5,5,(img)); paint.drawText(20,20,a,-1); paint.drawText(20,30,d,-1); paint.end(); 二.qt的
10、多线程问题(qt4与qt3有线程是很大不同的)1)如果不用多线程,一般是通过QApplication的消息循环来处理的 2)QThread本身是继承于QObject的,为线程间的signal-slot机制打下了基础(Qt4),而qt3的线程不是继承于QObject,不能在线程间使用signal-slot机制(如QObject::connect(Thread,SIGNAL(Log(QString)),