概述
代码贴上
VideoPlayThread.h:
class VideoPlayThread : public QThread{
private:
QLabel * label_videoPlayer;
QString fileName;
CvCapture * g_capture;
QImage * img;
IplImage* frame;
public:
VideoPlayThread();
void run();
void setFileName(QString FN);
void setLabelVideoPlayer(QLabel * labelVP);
private slots:
void nextFrame();
};
VideoPlayThread.cpp
调试的时候,发现问题好像是connect(timer, SIGNAL(timeout()), this, SLOT(nextFrame()));这一句,提示信息是:No such slot QThread::nextFrame()。VideoPlayThread::VideoPlayThread() : QThread(){// timer = new QTimer;
// connect(timer, SIGNAL(timeout()), this, SLOT(VideoPlayThread::nextFrame()));
}void VideoPlayThread::setFileName(QString FN){fileName = FN;}void VideoPlayThread::setLabelVideoPlayer(QLabel * labelVP){label_videoPlayer = labelVP;}void VideoPlayThread::nextFrame(){frame = cvQueryFrame(g_capture);if(frame){
cvCvtColor(frame, frame, CV_BGR2RGB);img = new QImage((uchar*)frame->imageData, (int)frame->width, (int)frame->height, (int)frame->widthStep, QImage::Format_RGB888);*img = img->scaledToWidth(label_videoPlayer->width(), Qt::FastTransformation);label_videoPlayer->setPixmap(QPixmap::fromImage(*img));}
// else
// timer->stop();
}void VideoPlayThread::run(){g_capture = NULL;QByteArray temp = fileName.toLatin1();char * FileName = temp.data();g_capture = cvCreateFileCapture(FileName);int frameNum = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);double fps = cvGetCaptureProperty(g_capture, CV_CAP_PROP_FPS);//获取帧率double vfps = 1000/fps;//计算每帧的播放时间frame = cvQueryFrame(g_capture);if(frame){
cvCvtColor(frame, frame, CV_BGR2RGB);img = new QImage((uchar*)frame->imageData, (int)frame->width, (int)frame->height, (int)frame->widthStep, QImage::Format_RGB888);*img = img->scaledToWidth(label_videoPlayer->width(), Qt::FastTransformation);label_videoPlayer->setPixmap(QPixmap::fromImage(*img));QTimer *timer = new QTimer;connect(timer, SIGNAL(timeout()), this, SLOT(nextFrame()));timer->start(30);}
exec();
cvReleaseCapture(&g_capture);}
这个我槽函数定义在自定义的线程类VideoPlayThread里了,而且this也显示的是VideoPlayThread*类型,为什么connect函数要去QThread里找槽函数?
还有这一块应该怎么写啊。
小弟叩首求教。
最后
以上就是落后人生为你收集整理的请教如何在QT自定义线程类中使用QTimer定时器功能的全部内容,希望文章能够帮你解决请教如何在QT自定义线程类中使用QTimer定时器功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复