On_actionCapture_triggered 没有匹配信号
No matching signal for On_actionCapture_triggered
我正在尝试在屏幕上显示来自可显示检测到的面孔的摄像头的实时画面。但是我不断得到:
QMetaObject::connectSlotsByName: No matching signal for On_actionCapture_triggered()
我没有使用 GUI 对 link 任何插槽或信号进行编码。我不明白问题出在哪里。
程序运行后应用程序输出框显示错误
任何关于问题所在的见解都将不胜感激。
.h 文件是
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <opencv/cv.h>
#include <opencv/highgui.h>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_actionCapture_triggered();
private:
Ui::Dialog* _ui;
CvCapture* _capture;
IplImage* _img;
CvHaarClassifierCascade* _cascade;
CvMemStorage* _storage;
QList<CvScalar> _colors;
QPixmap* _pixmap;
QTimer* _timer;
};
cpp 文件是:
#endif // DIALOG_H
#include "dialog.h"
#include "ui_dialog.h"
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include "opencv/cvaux.h"
#include <QTimer>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
_ui(new Ui::Dialog)
{
_ui->setupUi(this);
_capture = cvCaptureFromCAM( 0 );
_cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt2.xml");
_storage = cvCreateMemStorage(0);
_colors << cvScalar(0.0,0.0,255.0) << cvScalar(0.0,128.0,255.0)
<< cvScalar(0.0,255.0,255.0) << cvScalar(0.0,255.0,0.0)
<< cvScalar(255.0,128.0,0.0) << cvScalar(255.0,255.0,0.0)
<< cvScalar(255.0,0.0,0.0) << cvScalar(255.0,0.0,255.0);
_timer = new QTimer(this);
connect(_timer, SIGNAL(timeout()), this, SLOT(on_actionCapture_triggered()));
_timer->start(10);
}
Dialog::~Dialog()
{
cvReleaseImage(&_img);
cvReleaseCapture(&_capture);
delete _ui;
}
void Dialog::on_actionCapture_triggered()
{
// Query camera for next frame
_img = cvQueryFrame( _capture );
if (_img)
{
// Detect objects
cvClearMemStorage( _storage );
CvSeq* objects = cvHaarDetectObjects(_img,
_cascade,
_storage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize( 100, 100 ));
int n = (objects ? objects->total : 0);
CvRect* r;
// Loop through objects and draw boxes
for( int i = 0; i < n; i++ )
{
r = ( CvRect* )cvGetSeqElem( objects, i );
cvRectangle( _img,
cvPoint( r->x, r->y ),
cvPoint( r->x + r->width, r->y + r->height ),
_colors[i%8]
);
}
// Convert IplImage to QImage
QImage image = QImage((const uchar *)_img->imageData,
_img->width,
_img->height,
QImage::Format_RGB888).rgbSwapped();
_pixmap = new QPixmap(QPixmap::fromImage(image));
_ui->labelCapture->setPixmap(*_pixmap);
}
}
Qt autoconnect mechanism 尝试将信号连接到具有以下形式的对象槽:
void on_<object name>_<signal name>(<signal parameters>);
所以在这里它试图找到一个名称为 actionCapture
的对象,该对象有一个名称为 triggered
的信号以将其连接到您的插槽。但是没有这样的东西,它输出那个警告。
您应该将槽的名称更改为其他名称以避免出现此警告。
我正在尝试在屏幕上显示来自可显示检测到的面孔的摄像头的实时画面。但是我不断得到:
QMetaObject::connectSlotsByName: No matching signal for On_actionCapture_triggered()
我没有使用 GUI 对 link 任何插槽或信号进行编码。我不明白问题出在哪里。
程序运行后应用程序输出框显示错误
任何关于问题所在的见解都将不胜感激。
.h 文件是
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <opencv/cv.h>
#include <opencv/highgui.h>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_actionCapture_triggered();
private:
Ui::Dialog* _ui;
CvCapture* _capture;
IplImage* _img;
CvHaarClassifierCascade* _cascade;
CvMemStorage* _storage;
QList<CvScalar> _colors;
QPixmap* _pixmap;
QTimer* _timer;
};
cpp 文件是:
#endif // DIALOG_H
#include "dialog.h"
#include "ui_dialog.h"
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include "opencv/cvaux.h"
#include <QTimer>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
_ui(new Ui::Dialog)
{
_ui->setupUi(this);
_capture = cvCaptureFromCAM( 0 );
_cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt2.xml");
_storage = cvCreateMemStorage(0);
_colors << cvScalar(0.0,0.0,255.0) << cvScalar(0.0,128.0,255.0)
<< cvScalar(0.0,255.0,255.0) << cvScalar(0.0,255.0,0.0)
<< cvScalar(255.0,128.0,0.0) << cvScalar(255.0,255.0,0.0)
<< cvScalar(255.0,0.0,0.0) << cvScalar(255.0,0.0,255.0);
_timer = new QTimer(this);
connect(_timer, SIGNAL(timeout()), this, SLOT(on_actionCapture_triggered()));
_timer->start(10);
}
Dialog::~Dialog()
{
cvReleaseImage(&_img);
cvReleaseCapture(&_capture);
delete _ui;
}
void Dialog::on_actionCapture_triggered()
{
// Query camera for next frame
_img = cvQueryFrame( _capture );
if (_img)
{
// Detect objects
cvClearMemStorage( _storage );
CvSeq* objects = cvHaarDetectObjects(_img,
_cascade,
_storage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize( 100, 100 ));
int n = (objects ? objects->total : 0);
CvRect* r;
// Loop through objects and draw boxes
for( int i = 0; i < n; i++ )
{
r = ( CvRect* )cvGetSeqElem( objects, i );
cvRectangle( _img,
cvPoint( r->x, r->y ),
cvPoint( r->x + r->width, r->y + r->height ),
_colors[i%8]
);
}
// Convert IplImage to QImage
QImage image = QImage((const uchar *)_img->imageData,
_img->width,
_img->height,
QImage::Format_RGB888).rgbSwapped();
_pixmap = new QPixmap(QPixmap::fromImage(image));
_ui->labelCapture->setPixmap(*_pixmap);
}
}
Qt autoconnect mechanism 尝试将信号连接到具有以下形式的对象槽:
void on_<object name>_<signal name>(<signal parameters>);
所以在这里它试图找到一个名称为 actionCapture
的对象,该对象有一个名称为 triggered
的信号以将其连接到您的插槽。但是没有这样的东西,它输出那个警告。
您应该将槽的名称更改为其他名称以避免出现此警告。