Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中创建的显示摄像头+;QML中的视频输出 < >我在QML中显示了C++中的 >视频输出>强>中的 qGISTION/STAR>。 如果我在相机处于QML的情况下使用这种方式,一切都很好,我会得到视频输出: Item{ VideoOutput { id: videoOutput anchors.fill: parent source: camera } Camera { id: camera } }_C++_Qt_Camera_Qml - Fatal编程技术网

在C+中创建的显示摄像头+;QML中的视频输出 < >我在QML中显示了C++中的 >视频输出>强>中的 qGISTION/STAR>。 如果我在相机处于QML的情况下使用这种方式,一切都很好,我会得到视频输出: Item{ VideoOutput { id: videoOutput anchors.fill: parent source: camera } Camera { id: camera } }

在C+中创建的显示摄像头+;QML中的视频输出 < >我在QML中显示了C++中的 >视频输出>强>中的 qGISTION/STAR>。 如果我在相机处于QML的情况下使用这种方式,一切都很好,我会得到视频输出: Item{ VideoOutput { id: videoOutput anchors.fill: parent source: camera } Camera { id: camera } },c++,qt,camera,qml,C++,Qt,Camera,Qml,但就我而言,相机不在QML中。我在C++中创建它。我尝试用C++创建它,并将其设置为CONTURBY属性,并将其用于QML中的视频输出中。所以这是我的主要.cpp QCamera* camera; QList<QCameraInfo> cameras = QCameraInfo::availableCameras(); foreach (const QCameraInfo &cameraInfo, cameras) { qDebug(

但就我而言,相机不在QML中。我在C++中创建它。我尝试用C++创建它,并将其设置为CONTURBY属性,并将其用于QML中的视频输出中。所以这是我的主要.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);
    }

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

您不能直接将
QCamera
分配给
视频输出的源

您可以做的是将QML
摄像机的设置为与
QCamera
中的摄像机相匹配:

<>你的C++:

engine.rootContext()->setContextProperty("deviceId", cameraInfo.deviceName);
在您的QML中:

Camera {
    id: camera
    deviceId: cameraDeviceId
}

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

您不能直接将
QCamera
分配给
视频输出的源

您可以做的是将QML
摄像机的设置为与
QCamera
中的摄像机相匹配:

<>你的C++:

engine.rootContext()->setContextProperty("deviceId", cameraInfo.deviceName);
在您的QML中:

Camera {
    id: camera
    deviceId: cameraDeviceId
}

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

以防万一还有人对它感兴趣。
您可以使用Camera->setViewfinder()函数

我有一个用于QCamera的包装器类,可以做一些其他的事情。 除此之外,还有一个公共插槽用于从QML设置相机取景器

void MyCamClass::setViewFinder(QObject *vf)
{
  if(Camera)
    Camera->setViewfinder(qobject_cast<QAbstractVideoSurface *>(vf));
}
如果您想激活您的相机,您可以拨打:

mCamera->setviewFinder(vOutput.videoSurface);
mCamera是MyCamClass类的对象,已注册到QML环境。

在设置取景器之前,请确保启动相机。

以防有人仍感兴趣。
您可以使用Camera->setViewfinder()函数

我有一个用于QCamera的包装器类,可以做一些其他的事情。 除此之外,还有一个公共插槽用于从QML设置相机取景器

void MyCamClass::setViewFinder(QObject *vf)
{
  if(Camera)
    Camera->setViewfinder(qobject_cast<QAbstractVideoSurface *>(vf));
}
如果您想激活您的相机,您可以拨打:

mCamera->setviewFinder(vOutput.videoSurface);
mCamera是MyCamClass类的对象,已注册到QML环境。

在设置取景器之前,请确保启动相机。

你在“?”中描述了:如果你正在扩展自己的C++类与VideoOutput进行互操作,那么你可以提供一个QualObjito类,其中一个MyAtObjor属性公开了一个QQuiTeNavo派生类,该类具有QVIEW控件,或者,您可以提供一个基于QObject的类,该类具有可写的videoSurface属性,该属性可以接受基于QAbstractVideoSurface的类,并且可以遵循正确的协议将QVideoFrames传递给该类。我将对此进行检查并尝试。非常感谢你,FLUBISIS,链接的DOC是当你想要显示除了普通摄影师之外的东西的时候,你做了吗?如在……中描述的那样:如果你正在扩展你自己的C++类,与VideoOutput交互,您可以提供一个基于QObject的类,该类具有一个mediaObject属性,该属性公开一个QVideoRenderControl可用的QMediaObject派生类,或者,您可以提供一个基于QObject的类,该类具有可写的videoSurface属性,该属性可以接受基于QAbstractVideoSurface的类,并且可以遵循正确的协议将QVideoFrames传递给该类。我将对此进行检查并尝试。非常感谢@folibist当你想显示普通相机以外的东西时,链接的文档是为你准备的。谢谢你的回答@GrecKo。但是通过这种方法,我只需将设备ID传递给QML,相机就可以在不从C++获得设置的情况下设置。我说得对吗?让我说我修改我的C++ Q照相机,我希望在QML使用这个改进的相机。我会用这种方法创建新的QML相机类型吗?提前谢谢。谢谢你的回答@GrecKo。但是通过这种方法,我只需将设备ID传递给QML,相机就可以在不从C++获得设置的情况下设置。我说得对吗?让我说我修改我的C++ Q照相机,我希望在QML使用这个改进的相机。我会用这种方法创建新的QML相机类型吗?提前谢谢。