Отображение камеры, созданной в C ++, на VideoOutput в QML - PullRequest
0 голосов
/ 10 октября 2019

У меня проблема с отображением QCamera , созданного в C ++, до VideoOutput , который находится в QML. Если я использую этот способ, когда камера находится в QML, все в порядке, я получаю вывод видео:

Item{
        VideoOutput
        {
            id: videoOutput
            anchors.fill: parent
            source: camera
        }
        Camera
        {
            id: camera
        }
}

Но в моем случае камера не в QML. Я создаю это в C ++. Я попытался создать его в C ++ и установить его в качестве contextProperty и, следовательно, использовать его в источнике в VideoOutput в qml. Так что это мой main.cpp.

QCamera* camera;

    QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
    foreach (const QCameraInfo &cameraInfo, cameras)
    {
        qDebug() << cameraInfo.description();

        camera = new QCamera(cameraInfo);
    }

    if(camera)
    {
        qDebug() << "setContextProperty  camera ";
        engine.rootContext()->setContextProperty("mCamera", camera);
    }

И все в порядке, камера обнаружена, и я использую ее в QML следующим образом:

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Item
    {
        id: cameraView
        height: 230
        width: 300
        anchors.centerIn: parent

        VideoOutput
        {
            id: videoOutput
            anchors.fill: parent
            source: mCamera
        }
    }

Но в видео нет выходасюда. Возможно ли это достичь? Заранее спасибо.

1 Ответ

1 голос
/ 10 октября 2019

Вы не можете напрямую назначить QCamera источнику VideoOutput.

Что вы можете сделать, это установить deviceId QML Cameraсоответствовать одному из ваших QCamera:

В вашем C ++:

engine.rootContext()->setContextProperty("deviceId", cameraInfo.deviceName);

и в вашем QML:

Camera {
    id: camera
    deviceId: cameraDeviceId
}

VideoOutput {
    id: videoOutput
    anchors.fill: parent
    source: camera
}
...