使用雙目攝像頭,然後我就想能不能人工進行選擇,以下就是代碼:
QList<QCameraInfo> m_camera;
QList<QCamera*> m_cameraList;
foreach(QCameraInfo info, QCameraInfo::availableCameras()) {
m_camera.append(info);
}
QDialog* camerasSelectDialog = new QDialog(this);
camerasSelectDialog->setMinimumWidth(950);
camerasSelectDialog->setWindowTitle(tr("Select your disired cameras"));
QGridLayout* camerasSelectDialogLayout = new QGridLayout();
QLabel* leftLabel = new QLabel(tr("Left"));
QLabel* rightLabel = new QLabel(tr("Right"));
QButtonGroup* leftCameraButtonGroup = new QButtonGroup(this->camerasSelectDialog);
QButtonGroup* rightCameraButtonGroup = new QButtonGroup(this->camerasSelectDialog);
camerasSelectDialogLayout->addWidget(leftLabel, 1, 0);
camerasSelectDialogLayout->addWidget(rightLabel, 2, 0);
for (int i = 0; i < m_camera.count(); i++) {
QWidget* wid = new QWidget(this->camerasSelectDialog);
wid->setFixedSize(400, 300);
QCamera* camera = new QCamera(m_camera.at(i));
QCameraViewfinder* viewfinder = new QCameraViewfinder(wid);
viewfinder->setFixedSize(wid->size());
camera->setViewfinder(viewfinder);
m_cameraList << camera;
m_cameraList.at(i)->start();
camerasSelectDialogLayout->addWidget(wid, 0, i + 1);
QRadioButton* optionalLeftCameraRadioButton = new QRadioButton(this->m_camera.at(i).description());
leftCameraButtonGroup->addButton(optionalLeftCameraRadioButton, i);
QRadioButton* optionalRightCameraRadioButton = new QRadioButton(this->m_camera.at(i).description());
rightCameraButtonGroup->addButton(optionalRightCameraRadioButton, i);
if (i == 0) {
optionalLeftCameraRadioButton->setChecked(true);
optionalRightCameraRadioButton->setChecked(true);
}
camerasSelectDialogLayout->addWidget(optionalLeftCameraRadioButton, 1, i+1);
camerasSelectDialogLayout->addWidget(optionalRightCameraRadioButton, 2, i+1);
}
QDialogButtonBox* button = new QDialogButtonBox(camerasSelectDialog);
button->addButton(tr("OK"), QDialogButtonBox::YesRole);
button->addButton(tr("Cancel"), QDialogButtonBox::NoRole);
connect(button, SIGNAL(accepted()), camerasSelectDialog, SLOT(accept()));
connect(button, SIGNAL(rejected()), camerasSelectDialog, SLOT(reject()));
camerasSelectDialogLayout->addWidget(button, 3, 0, 1, -1);
camerasSelectDialog->setLayout(camerasSelectDialogLayout);
auto res = camerasSelectDialog->exec();
for (int i = 0; i < m_cameraList.count(); i++)m_cameraList.at(i)->stop();
if (res == QDialog::Accepted) {
int leftCameraId = leftCameraButtonGroup->checkedId();
int rightCameraId = rightCameraButtonGroup->checkedId();
m_cameraList.clear();
qDeleteAll(m_cameraList);
QCamera* leftCamera = new QCamera(m_camera.at(leftCameraId));
QCamera* rightCamera = new QCamera(m_camera.at(rightCameraId));
CamerasShowWidget* camerasShowWidget = new CamerasShowWidget(leftCamera, rightCamera);
camerasShowWidget->show();
m_camera.clear();
}
else {
m_camera.clear();
m_cameraList.clear();
qDeleteAll(m_cameraList);
}
界面如下圖所示
CamerasShowWidget.cpp代碼 .h代碼應該能相應寫出,在此就不展示了。
#include "CamerasShowWidget.h"
#include <QCameraViewfinder>
#include <QHBoxLayout>
CamerasShowWidget::CamerasShowWidget(QCamera* leftCamera, QCamera* rightCamera, QWidget* parent) :QWidget(parent) {
this->setWindowTitle(tr("Cameas"));
QHBoxLayout* camerasShowWidgetLayout = new QHBoxLayout();
QWidget* leftWidget = new QWidget(this);
QWidget* rightWidget = new QWidget(this);
this->leftCamera = leftCamera;
this->rightCamera = rightCamera;
QCameraViewfinder* leftViewfinder = new QCameraViewfinder(leftWidget);
QCameraViewfinder* rightViewfinder = new QCameraViewfinder(rightWidget);
this->leftCamera->setViewfinder(leftViewfinder);
this->rightCamera->setViewfinder(rightViewfinder);
this->leftCamera->start();
this->rightCamera->start();
QList<QCameraViewfinderSettings> leftViewSets = this->leftCamera->supportedViewfinderSettings();
QList<QCameraViewfinderSettings> rightViewSets = this->rightCamera->supportedViewfinderSettings();
this->leftCamera->setViewfinderSettings(leftViewSets[0]);
this->rightCamera->setViewfinderSettings(rightViewSets[0]);
leftWidget->setFixedSize(leftViewSets[0].resolution());
rightWidget->setFixedSize(rightViewSets[0].resolution());
camerasShowWidgetLayout->addWidget(leftWidget);
camerasShowWidgetLayout->addWidget(rightWidget);
this->setLayout(camerasShowWidgetLayout);
}
void CamerasShowWidget::closeEvent(QCloseEvent* e) {
delete this->leftCamera;
delete this->rightCamera;
this->leftCamera = NULL;
this->rightCamera = NULL;
}
在上面那個界面中選擇第二個攝像頭作爲左攝像頭和第三個攝像頭作爲右攝像頭之後,點擊確定出現如下界面。
參考鏈接: