Поскольку я использую QML это инструкции о получении объекта QML и использовать его в C++ код. Я думаю, что чистый материал C++ будет таким же.
Прежде всего, необходимо выделить объект камеры в источнике QML:
Camera {
id: camera
objectName: "CameraObject"
}
Получить корневой объект QQuickView:
QQuickView view;
QQuickItem* root = view.rootObject();
assert(root != nullptr);
Получить QML камеру:
QObject* qmlCamera = root->findChild<QObject*>("CameraObject");
assert(qmlCamera != nullptr);
Получить C++ камеру от объекта камеры QML:
QCamera* camera = qvariant_cast<QCamera*>(qmlCamera->property("mediaObject"));
assert(camera != nullptr);
Найти нужный вам формат:
QCameraViewfinderSettings bestSetting;
assert(bestSetting.isNull()); // sanity check
auto viewfinderSettings = camera->supportedViewfinderSettings();
for (auto i: viewfinderSettings) {
if (i.pixelFormat() != QVideoFrame::Format_ARGB32) {
// skip non-ARGB formats
continue;
}
// check i.resolution()
// several settings with Format_ARGB32 will be available
// pick the one with resolution which fits best for you
bestSetting = i;
}
Убедитесь, что что-то найти и применить настройки:
assert(bestSetting.pixelFormat() == QVideoFrame::Format_ARGB32);
camera->setViewfinderSettings(bestSetting);
Теперь посмотреть можно показать:
view.show();
return app.exec();