I solved my problem and I share it here,
In order for the camera image to be displayed like a mirror using qcamera, the code is as follows:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
menu = new QMenu;
QActionGroup *videoDevicesGroup = new QActionGroup(this);
videoDevicesGroup->setExclusive(true);
const QList<QCameraInfo> availableCameras = QCameraInfo::availableCameras();
for (const QCameraInfo &cameraInfo : availableCameras) {
QAction *videoDeviceAction = new QAction(cameraInfo.description(), videoDevicesGroup);
videoDeviceAction->setCheckable(true);
videoDeviceAction->setData(QVariant::fromValue(cameraInfo));
if (cameraInfo == QCameraInfo::defaultCamera())
videoDeviceAction->setChecked(true);
menu->addAction(videoDeviceAction);
videoItem = new QGraphicsVideoItem;
videoItem->setSize(QSizeF(640, 480));
scene = new QGraphicsScene(this);
graphicsView = new QGraphicsView(scene);
scene->addItem(videoItem);
}
connect(videoDevicesGroup, &QActionGroup::triggered, this, &MainWindow::updateCameraDevice);
setCamera(QCameraInfo::defaultCamera());
ui->verticalLayout_2->addWidget(menu);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::updateCameraDevice(QAction *action)
{
setCamera(qvariant_cast<QCameraInfo>(action->data()));
}
void MainWindow::setCamera(const QCameraInfo &cameraInfo)
{
m_camera.reset(new QCamera(cameraInfo));
QTransform xForm;
xForm.scale(-1,1);
xForm.translate(-( scene->sceneRect().width() ), 0);
m_camera->setViewfinder(videoItem);
videoItem->setTransform(QTransform(xForm));
ui->verticalLayout_3->addWidget(graphicsView);
m_camera->start();
}