MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->pushButton->setEnabled(false);
ui->pushButton_2->setEnabled(false);
ui->comboBox->addItem("请选择摄像头");
// 获取可用摄像头列表
cameras = QMediaDevices::videoInputs();
if(cameras.isEmpty())
{
QMessageBox::information(this,"提示","该机器无可用摄像头","确定");
return;
}
// 遍历摄像头列表并输出名称
for (const QCameraDevice &cameraDevice : cameras) {
// qDebug()<< cameraDevice.description();
ui->comboBox->addItem(cameraDevice.description());
}
//根据下拉项返回指定摄像头id
connect(ui->comboBox,&QComboBox::currentTextChanged,this,[=](QString text){
for (const QCameraDevice &cameraDevice : cameras) {
if(cameraDevice.description() == text)
{
ui->pushButton->setEnabled(true);
m_cameraDevice = cameraDevice;//保存摄像头信息
}
}
});
}
void MainWindow::on_pushButton_clicked()
{
captureSession= new QMediaCaptureSession;
camera = new QCamera(m_cameraDevice);
//视频输入
captureSession->setCamera(camera);
//视频输出
captureSession->setVideoOutput(ui->widget);
//ui->widget QVideoWidget 关闭摄像头之后最后一帧画面会留在控件上
camera->start();
m_isWorking = true;
ui->pushButton->setEnabled(false);
ui->pushButton_2->setEnabled(true);
// captureSession->start();
}
void MainWindow::on_pushButton_2_clicked()
{
camera->stop();
m_isWorking = false;
ui->pushButton->setEnabled(true);
ui->pushButton_2->setEnabled(false);
camera->deleteLater();
captureSession->deleteLater();
// captureSession->stop();
}
关闭第一个摄像头之后不能更换显示,关闭之后会残留最后一帧画面,后续再改