以下是一个使用Qt库调用摄像头进行录像的简单示例:
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QVBoxLayout>
#include <QPushButton>
#include <QFileDialog>
#include <QDebug>
#include <QWidget>
class CameraWidget : public QWidget
{
Q_OBJECT
public:
CameraWidget(QWidget *parent = 0)
: QWidget(parent), m_camera(0), m_imageCapture(0)
{
QVBoxLayout *layout = new QVBoxLayout(this);
// 创建相机视图
m_viewfinder = new QCameraViewfinder(this);
layout->addWidget(m_viewfinder);
// 创建开始和停止按钮
m_startButton = new QPushButton(tr("开始"), this);
connect(m_startButton, SIGNAL(clicked()), this, SLOT(startCamera()));
layout->addWidget(m_startButton);
m_stopButton = new QPushButton(tr("停止"), this);
connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stopCamera()));
layout->addWidget(m_stopButton);
// 创建拍照按钮
m_captureButton = new QPushButton(tr("拍照"), this);
connect(m_captureButton, SIGNAL(clicked()), this, SLOT(captureImage()));
layout->addWidget(m_captureButton);
// 创建保存路径选择按钮
m_saveLocationButton = new QPushButton(tr("选择保存路径"), this);
connect(m_saveLocationButton, SIGNAL(clicked()), this, SLOT(selectSaveLocation()));
layout->addWidget(m_saveLocationButton);
// 初始化相机和图像捕获器
m_camera = new QCamera(this);
m_camera->setViewfinder(m_viewfinder);
m_imageCapture = new QCameraImageCapture(m_camera, this);
// 确保捕获的图像保存为JPEG格式
m_imageCapture->setEncodingFormat(QImageEncoderSettings::Format_JPEG);
// 将保存路径设置为默认值
m_saveLocation = QDir::homePath();
}
public slots:
void startCamera()
{
m_camera->start();
}
void stopCamera()
{
m_camera->stop();
}
void captureImage()
{
if (m_imageCapture->isReadyForCapture()) {
// 捕获图像
m_imageCapture->capture();
}
}
void selectSaveLocation()
{
// 显示保存路径选择对话框
QString saveLocation = QFileDialog::getExistingDirectory(this, tr("选择保存路径"), m_saveLocation);
if (!saveLocation.isEmpty()) {
m_saveLocation = saveLocation;
qDebug() << "保存路径:" << m_saveLocation;
}
}
protected:
void keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Space:
captureImage();
break;
default:
QWidget::keyPressEvent(event);
}
}
private:
QCamera *m_camera;
QCameraViewfinder *m_viewfinder;
QCameraImageCapture *m_imageCapture;
QPushButton *m_startButton;
QPushButton *m_stopButton;
QPushButton *m_captureButton;
QPushButton *m_saveLocationButton;
QString m_saveLocation;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
CameraWidget w;
w.show();
return app.exec();
}
#include "main.moc"
该示例创建一个 CameraWidget
类,它包含一个 QCameraViewfinder
用于显示相机视图,以及一些按钮用于控制相机操作和保存图像。在构造函数中,我们初始化相机、视图和图像捕获器,并将它们添加到窗口布局中。我们还设置了一个默认的保存路径,并在 selectSaveLocation
槽中让用户选择一个新的保存路径。
开始、停止和拍照操作分别由 startCamera
、stopCamera
和 captureImage
槽处理。在 captureImage
槽中,我们检查 isReadyForCapture
方法以确保图像捕获器已经准备好捕获图像。如果是这样,我们调用 capture
方法来捕获图像并将其保存到默认的保存路径中。如果需要,您可以在 capture
方法的参数中指定要保存的文件名和格式。
最后,在 keyPressEvent
中,我们为空格键添加了一个快捷方式,以便更容易地捕获图像。