#include "cameravideo.h"
#include "ui_cameravideo.h"
CameraVideo::CameraVideo(QWidget *parent)
: QDialog(parent)
, ui(new Ui::CameraVideo)
{
ui->setupUi(this);
setFixedSize(QSize(800, 600));
setWindowFlags (Qt::FramelessWindowHint);
init();
initDBhandle();
checkTableExist();
initCamera();
}
CameraVideo::~CameraVideo()
{
delete ui;
if(m_pCameraClass)
{
delete m_pCameraClass;
m_pCameraClass = NULL;
}
if(m_pCameraClass_2)
{
delete m_pCameraClass_2;
m_pCameraClass_2 = NULL;
}
if(m_sqlDB.isOpen())
{
m_sqlDB.close();
}
m_checkDiskSPaceTimer->stop();
m_checkDiskSPaceTimer->deleteLater();
}
void CameraVideo::setCycle(quint64 nCycle)
{
m_nCycle = nCycle;
}
void CameraVideo::init()
{
m_nCycle = 10;
curCamera = NULL;
curCamera_2 = NULL;
m_pCameraClass = NULL;
m_pCameraClass_2 = NULL;
m_strVideoPath = QApplication::applicationDirPath() + VideoSaveDir;
m_strPicturePath = QApplication::applicationDirPath() + PictrueSaveDir;
m_strVideomanageDBPath = QApplication::applicationDirPath() + VideoManagement;
m_checkDiskSPaceTimer = new QTimer(this);
m_checkDiskSPaceTimer->setInterval(1000);
m_checkDiskSPaceTimer->start();
connect(m_checkDiskSPaceTimer, SIGNAL(timeout()), this, SLOT(onCheckDisk_timeout()));
//向文件监视器添加监视
m_pFSWatcher = new QFileSystemWatcher(this);
m_pFSWatcher->addPath(m_strVideoPath);
orderFilesByTimeDesc();
connect(m_pFSWatcher, SIGNAL(directoryChanged(const QString&)),this, SLOT(onDirectoryChanged(const QString&)));
}
void CameraVideo::initCamera()
{
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
if(cameras.size() > 0)
{
for(int i = 0; i < cameras.size(); i++)
{
qDebug() << "camera:" << cameras[i].description() << "," << cameras[i].deviceName();
}
initCamera1(cameras[0]);
if(cameras.size() > 1)
{
initCamera2(cameras[1]);
}
}
else
{
if(this->isVisible())
{
QMessageBox::warning(nullptr, "提示", "当前设备无摄像头,请连接摄像头!", QMessageBox::Ok);
}
}
if(m_pCameraClass)
{
connect(m_pCameraClass, SIGNAL(addNewVideo(QFileInfo &)), this, SLOT(on_addNewVideo(QFileInfo& )));
}
if(m_pCameraClass_2)
{
connect(m_pCameraClass_2, SIGNAL(addNewVideo(QFileInfo &)), this, SLOT(on_addNewVideo(QFileInfo& )));
}
}
bool CameraVideo::initCamera1(QCameraInfo &cameraInfo)
{
bool bNewCamera = false;
if(curCamera == NULL)
{
curCamera = new QCamera(cameraInfo, this);
bNewCamera = true;
}
ui->cameraNameLabel->setText(cameraInfo.description());
ui->cameraNameLabel->setToolTip(cameraInfo.deviceName());
curCamera->setViewfinder(ui->cameraOneviewFinder); //设置取景框预览
curCamera->setCaptureMode(QCamera::CaptureViewfinder);
ui->checkStillImage->setChecked(curCamera->isCaptureModeSupported(QCamera::CaptureStillImage)); //支持抓图
ui->checkVideo->setChecked(curCamera->isCaptureModeSupported(QCamera::CaptureVideo));//支持视频录制
//ui->checkFocus->setChecked(curCamera->focus()->isAvailable());//支持变焦
connect(curCamera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(on_cameraStateChanged(QCamera::State)));
connect(curCamera, SIGNAL(captureModeChanged(QCamera::CaptureModes)),
this, SLOT(on_cameraCaptureModeChanged(QCamera::CaptureModes)));
if(m_pCameraClass == NULL)
{
m_pCameraClass = new Camera("camera1",m_sqlDB, this, m_strVideoPath, curCamera);
}
if(bNewCamera)
{
m_pCameraClass->m_pCurCamera = curCamera;
}
connect(m_pCameraClass, SIGNAL(saveVideoToNewFile(QString)), this, SLOT(on_camera_saveVideoToNewFile(QString)));
connect(m_pCameraClass->m_pMediaRecorder, SIGNAL(stateChanged(QMediaRecorder::State)),
this, SLOT(on_videoStateChanged(QMediaRecorder::State)));
connect(m_pCameraClass->m_pMediaRecorder, SIGNAL(durationChanged(qint64)),
this, SLOT(on_videoDurationChanged(qint64)));
connect(m_pCameraClass->imageCapture, SIGNAL(readyForCaptureChanged(bool)),
this, SLOT(on_imageReadyForCapture(bool)));
connect(m_pCameraClass->imageCapture,SIGNAL(imageCaptured(int, const QImage &)),
this,SLOT(on_imageCaptured(int, const QImage &)));
connect(m_pCameraClass->imageCapture,SIGNAL(imageSaved(int, const QString &)),
this,SLOT(on_imageSaved(int, const QString &)));
m_pCameraClass->setVideoCycle(m_nCycle);
}
bool CameraVideo::initCamera2(QCameraInfo &cameraInfo)
{
bool bNewCamera = false;
if(curCamera_2 == NULL)
{
curCamera_2 = new QCamera(cameraInfo, this);
bNewCamera = true;
}
ui->camera_2NameLabel->setText(cameraInfo.description());
ui->camera_2NameLabel->setToolTip(cameraInfo.deviceName());
curCamera_2->setViewfinder(ui->cameraTwoViewFinder); //设置取景框预览
curCamera_2->setCaptureMode(QCamera::CaptureViewfinder);
ui->checkStillImage_2->setChecked(curCamera_2->isCaptureModeSupported(QCamera::CaptureStillImage)); //支持抓图
ui->checkVideo_2->setChecked(curCamera_2->isCaptureModeSupported(QCamera::CaptureVideo));//支持视频录制
//ui->checkFocus_2->setChecked(curCamera_2->focus()->isAvailable());//支持变焦
connect(curCamera_2, SIGNAL(stateChanged(QCamera::State)), this, SLOT(on_camera_2StateChanged(QCamera::State)));
connect(curCamera_2, SIGNAL(captureModeChanged(QCamera::CaptureModes)),
this, SLOT(on_camera_2CaptureModeChanged(QCamera::CaptureModes)));
if(m_pCameraClass_2 == NULL)
{
m_pCameraClass_2 = new Camera("camera2",m_sqlDB, this, m_strVideoPath, curCamera_2);
}
if(bNewCamera)
{
m_pCameraClass_2->m_pCurCamera = curCamera_2;
}
connect(m_pCameraClass_2, SIGNAL(saveVideoToNewFile(QString)), this, SLOT(on_camera2_saveVideoToNewFile(QString)));
connect(m_pCameraClass_2->m_pMediaRecorder, SIGNAL(stateChanged(QMediaRecorder::State)),
this, SLOT(on_video_2StateChanged(QMediaRecorder::State)));
connect(m_pCameraClass_2->m_pMediaRecorder, SIGNAL(durationChanged(qint64)),
this, SLOT(on_video_2DurationChanged(qint64)));
connect(m_pCameraClass_2->imageCapture, SIGNAL(readyForCaptureChanged(bool)),
this, SLOT(on_image_2ReadyForCapture(bool)));
connect(m_pCameraClass_2->imageCapture,SIGNAL(imageCaptured(int, const QImage &)),
this,SLOT(on_image_2Captured(int, const QImage &)));
connect(m_pCameraClass_2->imageCapture,SIGNAL(imageSaved(int, const QString &)),
this,SLOT(on_image_2Saved(int, const QString &)));
m_pCameraClass_2->setVideoCycle(m_nCycle);
}
void CameraVideo::initDBhandle()
{
if(m_sqlDB.isOpen() == false)
{
m_sqlDB = QSqlDatabase::addDatabase("QSQLITE", "VideoManagement");
m_sqlDB.setDatabaseName(m_strVideomanageDBPath + "/VideoManagement.db");
bool result = m_sqlDB.open();
if(result == false)
{
QString strError = m_strVideomanageDBPath + "/VideoManagement.db";
strError += "打开失败!";
QMessageBox::warning(nullptr, "数据库错误", strError, QMessageBox::Ok);
}
}
}
void CameraVideo::checkTableExist()
{
QSqlQuery sql_query(m_sqlDB);
bool bSucess = sql_query.exec("create table if not exists videos([video_name] NVARCHAR, [video_size] NVARCHAR, "
"[video_creation_time] DATETIME, [cycle] NVARCHAR, [path] NVARCHAR, [part1] NVARCHAR, [part2] NVARCHAR)");
if (!bSucess)
{
return;
}
}
void CameraVideo::on_cameraStateChanged(QCamera::State state)
{
switch (state)
{
case QCamera::UnloadedState:
ui->cameraOneStateLabel->setText
没有合适的资源?快使用搜索试试~ 我知道了~
CameraVideoAC.rar
共54个文件
bmp:22个
ico:15个
cpp:4个
4星 · 超过85%的资源 需积分: 46 61 下载量 65 浏览量
2021-02-24
20:30:21
上传
评论 1
收藏 313KB RAR 举报
温馨提示
QT的QCamera双摄像头循环视频录制,实现可设循环时间的录制,支持摄像头热插拔录制。
资源详情
资源评论
资源推荐
收起资源包目录
CameraVideoAC.rar (54个子文件)
CameraVideoAC
CameraVideo.pro 1KB
camera.h 2KB
cameravideo.ui 28KB
cameravideo.cpp 29KB
images
828.bmp 1KB
626.bmp 1KB
237.GIF 1000B
mute.bmp 13KB
132.bmp 1KB
001.GIF 336B
music.ico 95KB
620.bmp 1KB
video_chat.ico 158KB
22.ico 22KB
610.bmp 1KB
824.bmp 1KB
audio_file.ico 158KB
612.bmp 1KB
Movie Clip.ico 25KB
23.ico 25KB
630.bmp 1KB
08.JPG 958B
exit_24.ico 2KB
Audio CD.ico 23KB
318.bmp 1KB
430.bmp 1KB
remove_user.ico 158KB
624.bmp 1KB
616.bmp 1KB
316.bmp 1KB
Recycle Bin empty.ico 25KB
110.JPG 726B
212.bmp 1KB
file_pictures.ico 95KB
222.bmp 1KB
volumn.bmp 13KB
224.bmp 1KB
picture.ico 95KB
Wave Sound.ico 23KB
632.bmp 1KB
104.bmp 1KB
622.bmp 1KB
5.ico 25KB
214.bmp 1KB
Shut Down.ico 25KB
video
sound
shutter.wav 49KB
CameraVideo_zh_CN.ts 106B
util.cpp 2KB
main.cpp 194B
util.h 2KB
cameravideo.h 4KB
CameraVideo.pro.user 22KB
camera.cpp 7KB
res.qrc 2KB
共 54 条
- 1
njit_320
- 粉丝: 194
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2