首先是UI布局
在pro文件中添加两个类
QT += multimedia QT += multimediawidgets
然后我们需要包含几个摄像头使用的头文件并创建摄像头的对象
#include <QCamera> #include <QCameraInfo> #include <QCameraViewfinder> #include <QCameraImageCapture>
QCamera* m_camera; // 摄像头 QCameraViewfinder * m_viewFinder; // 取景 QCameraImageCapture* m_imageCaputer; // 截图
然后编写初始化函数,将电脑上扫描到的摄像头设备添加到combox中,并默认打开第一个获取到的摄像头将画面显示在widget中
// 遍历检测到的摄像头 foreach (const QCameraInfo& info, QCameraInfo::availableCameras()) { m_camera = new QCamera(info); // qDebug()<<info.description()<<info.deviceName(); ui->comboBox->addItem(info.deviceName()); } //取景框类 m_viewFinder = new QCameraViewfinder(); m_camera->setViewfinder(m_viewFinder); QVBoxLayout *layout=new QVBoxLayout(ui->widget); layout->addWidget(m_viewFinder); //图像录制类 m_imageCaputer = new QCameraImageCapture(m_camera); //打开摄像头 m_camera->start();
然后编写拍照按钮的函数
//设置为拍照模式 m_camera->setCaptureMode(QCamera::CaptureStillImage); //对相机锁定(异步操作) m_camera->searchAndLock(); //拍照并且把照片保存到这个路径中 m_imageCaputer->capture("C:\\Users\\kaishuibaicai\\Desktop\\camera\\camera"); //解锁 m_camera->unlock();
这里需要注意的是电脑上没有摄像头的话程序会直接异常结束,这里是因为我们初始化时候不管我们的对象有没有检测到摄像头都直接打开,在没有的情况下打开肯定是会崩溃的。