使用相机拍摄,并在上面画线
class camera : public QMainWindow
{
Q_OBJECT
public:
explicit camera(QWidget *parent = 0);
~camera();
bool eventFilter(QObject *watched, QEvent *event);//事件过滤器
void magicTime();//画图函数
private slots :
void slot_takePhoto(); //拍摄照片
void slot_openCamara(); //打开相机
void slot_processImage(int, QImage); //实时处理
void slot_closeCamara(); //关闭摄像头
private:
Ui::camera *ui;
QCamera *camera;
//QCameraViewfinder *viewfinder;
QCameraImageCapture *imageCapture;
QCameraImageCapture *imageCapture1;
};
camera::~camera()
{
delete ui;
}
camera ::camera (QWidget *parent) : QMainWindow(parent), ui(new Ui::camera )
{
ui->setupUi(this);
camera = new QCamera(this);
imageCapture = new QCameraImageCapture(camera);
camera->setCaptureMode(QCamera::CaptureStillImage);
ui->label_2->setScaledContents(true); //在label_2上显示捕捉的图片
camera->setViewfinder(ui->viewfinder);//在ui文件里创造QCameraViewfinder类
ui->label->installEventFilter(this); //在label上画线
//当图像变动时发射信号,调用槽
connect(imageCapture, SIGNAL(imageCaptured(int, QImage)), this, SLOT(slot_processImage(int, QImage)));
connect(ui->pushBotton1, SIGNAL(clicked()), this, SLOT(slot_openCamara()));
connect(ui->pushBotton2, SIGNAL(clicked()), this, SLOT(slot_takePhoto()));
connect(ui->pushBotton3, SIGNAL(clicked()), this, SLOT(slot_closeCamara()));
}
void camera::slot_openCamara()
{
camera->start();
while (true)
{
imageCapture->capture();
//播放工业相机的同时使界面能够响应其他的button
QCoreApplication::processEvents();
}
}
void camera::slot_takePhoto()
{
imageCapture->capture();
}
void camera::slot_processImage(int, QImage image);
{
//处理传入的图片image
}
void camera::slot_closeCamara()
{
camera->stop();//停止相机
}
bool camera::eventFilter(QObject *watched, QEvent *event)
{
if (watched == ui->label&&event->type() == QEvent::Paint)
{
magicTime();
}
return QWidget::eventFilter(watched, event);
}
void camera::painter()
{
QPainter painter(ui->label); //在label上画图
painter.setPen(QPen(Qt::green, 2)); //设置画笔的颜色和线型大小
painter.setBrush(Qt::green); //设置画刷颜色
painter.drawRect(10,10,200,200); //画矩形
}