1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00
qTox/widget/selfcamview.cpp
2014-06-28 22:24:39 +02:00

81 lines
2.2 KiB
C++

#include "selfcamview.h"
#include <QActionGroup>
#include <QMessageBox>
#include <QCloseEvent>
#include <QShowEvent>
SelfCamView::SelfCamView(QWidget* parent)
: QWidget(parent), camera(nullptr), mainLayout{new QHBoxLayout()}
{
setLayout(mainLayout);
setWindowTitle("Tox video test");
setMinimumSize(320,240);
QByteArray cameraDevice;
/*
QActionGroup *videoDevicesGroup = new QActionGroup(this);
videoDevicesGroup->setExclusive(true);
foreach(const QByteArray &deviceName, QCamera::availableDevices()) {
QString description = camera->deviceDescription(deviceName);
QAction *videoDeviceAction = new QAction(description, videoDevicesGroup);
videoDeviceAction->setCheckable(true);
videoDeviceAction->setData(QVariant(deviceName));
if (cameraDevice.isEmpty()) {
cameraDevice = deviceName;
videoDeviceAction->setChecked(true);
}
ui->menuDevices->addAction(videoDeviceAction);
}
connect(videoDevicesGroup, SIGNAL(triggered(QAction*)), SLOT(updateCameraDevice(QAction*)));
*/
viewfinder = new QCameraViewfinder(this);
mainLayout->addWidget(viewfinder);
viewfinder->show();
setCamera(cameraDevice);
}
SelfCamView::~SelfCamView()
{
delete camera;
}
void SelfCamView::setCamera(const QByteArray &cameraDevice)
{
delete camera;
if (cameraDevice.isEmpty())
camera = new QCamera;
else
camera = new QCamera(cameraDevice);
//connect(camera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(updateCameraState(QCamera::State)));
connect(camera, SIGNAL(error(QCamera::Error)), this, SLOT(displayCameraError()));
camera->setViewfinder(viewfinder);
//updateCameraState(camera->state());
camera->setCaptureMode(QCamera::CaptureVideo);
}
void SelfCamView::displayCameraError()
{
QMessageBox::warning(this, tr("Camera error"), camera->errorString());
}
void SelfCamView::closeEvent(QCloseEvent* event)
{
camera->stop();
event->accept();
}
void SelfCamView::showEvent(QShowEvent* event)
{
camera->start();
event->accept();
}