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