首页 > 解决方案 > 在 QML 的 VideoOutput 上显示用 C++ 创建的相机

问题描述

我在将 C++ 创建的QCamera显示到 QML 中的VideoOutput时遇到问题。如果我在 QML 中使用相机的这种方式,一切都很好,我得到视频输出:

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

但就我而言,相机不在 QML 中。我正在用 C++ 创建它。我试图在 C++ 中创建它并将其设置为 contextProperty,因此在 qml 的 VideoOutput 的源代码中使用它。所以这是我的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
        }
    }

但是这种方式没有视频输出。这有可能实现吗?提前致谢。

标签: c++qtcameraqml

解决方案


您不能直接将 a 分配给 aQCamera的来源VideoOutput

您可以做的是设置deviceIdQMLCamera以匹配您的QCamera

在您的 C++ 中:

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

在你的 QML 中:

Camera {
    id: camera
    deviceId: cameraDeviceId
}

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

推荐阅读