QT中显示如下错误?error: definition of implicitly-declared 'virtual Widget::~Widget()' Widget::~Widget()

图片说明

下面是完整代码

#include "widget.h"

#include "ui_widget.h"

#include "qdebug.h"

#include "stdio.h"

Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

cam = NULL;

timer = new QTimer(this);

imag = new QImage(); // 初始化

/*信号和槽*/

connect(timer, SIGNAL(timeout()), this, SLOT(readFarme())); // 时间到,读取当前摄像头信息

connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(openCamara()));//打开摄像头

connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(takingPictures()));//抓取 画面帧

connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(closeCamara()));//关闭摄像头

connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(Video()));//进行录像存储

connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(videoDoms()));//录像播放

connect(ui->pushButton_6,SIGNAL(clicked()),this,SLOT(stopVideo()));

}

void Widget::openCamara()

{

cam = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频

timer->start(33); // 开始计时,超时则发出timeout()信号

}

void Widget::readFarme()

{

frame = cvQueryFrame(cam);// 从摄像头中抓取并返回每一帧

// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不同的摄像头用不同的格式。

// QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);

QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height,

QImage::Format_RGB888).rgbSwapped();

ui->label->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上

}

void Widget::takingPictures()

{

frame = cvQueryFrame(cam);// 从摄像头中抓取并返回每一帧

// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不同的摄像头用不同的格式。

// QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);

QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height,

QImage::Format_RGB888).rgbSwapped();

ui->label_2->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上

}

void Widget::closeCamara()

{

timer->stop(); // 停止读取数据。

cvReleaseCapture(&cam);//释放内存;

ui->label->setAlignment(Qt::AlignCenter);

ui->label->setText(tr("摄像头已关闭!"));

}

void Widget::Video()

{

// CvCapture* capture = cvCaptureFromCAM(-1);

CvVideoWriter* video = NULL;

frame = NULL;

int n;

if(!cam) //如果不能打开摄像头给出警告

{

qDebug()<<"Can not open the camera.";

}

else

{

frame = cvQueryFrame(cam); //首先取得摄像头中的一帧

video = cvCreateVideoWriter("k:\\camera.avi", CV_FOURCC('X', 'V', 'I', 'D'),

8,cvSize(frame->width,frame->height)); //创建CvVideoWriter对象并分配空间

//保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32

if (video) //如果能创建CvVideoWriter对象则表明成功

{

qDebug()<<"VideoWriter has created.";

}

cvNamedWindow("Camera Video",1); //新建一个窗口

// int i = 0;

// int x = 200;// 让它循环200次自动停止录取

while(1)

{

frame = cvQueryFrame(cam); //从CvCapture中获得一帧

if(!frame)

{

qDebug()<<"Can not get frame from the capture.";

break;

}

n = cvWriteFrame(video,frame); //判断是否写入成功,如果返回的是1,表示写入成功

cvShowImage("Camera Video",frame); //显示视频内容的图片

// i++;

if (cvWaitKey(2)>0)

break; //有其他键盘响应,则退出

//if (i > x) break;

}

cvReleaseVideoWriter(&video);

cvDestroyWindow("Camera Video");

}

}

void Widget::videoDoms()

{

capture = 0;

capture = cvCaptureFromFile("k:\\camera.avi");

cvNamedWindow("src", 0);

IplImage *frame2 = 0;

int key;

for(;;){

frame2 = cvQueryFrame(capture);

if(!frame) break;

cvShowImage ("src",frame2);

key = cvWaitKey(10);

if((char)key == 'e') break;

}

cvDestroyAllWindows();

cvReleaseCapture(&capture);

}

void Widget::stopVideo()

{

// cvDestroyAllWindows();

// cvDestroyWindow("src");

// cvReleaseCapture(&capture);

}

Widget::~Widget()

{

delete ui;

timer->stop(); // 停止读取数据。

cvReleaseCapture(&cam);//释放内存;

}

回答

在Widget的类定义中加上

public:

~Widget();

以上是 QT中显示如下错误?error: definition of implicitly-declared 'virtual Widget::~Widget()' Widget::~Widget() 的全部内容, 来源链接: utcz.com/a/42842.html

回到顶部