在C+中创建的显示摄像头+;QML中的视频输出 < >我在QML中显示了C++中的 >视频输出>强>中的 qGISTION/STAR>。 如果我在相机处于QML的情况下使用这种方式,一切都很好,我会得到视频输出: Item{ VideoOutput { id: videoOutput anchors.fill: parent source: camera } Camera { id: camera } }
但就我而言,相机不在QML中。我在C++中创建它。我尝试用C++创建它,并将其设置为CONTURBY属性,并将其用于QML中的视频输出中。所以这是我的主要.cpp在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(
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相机类型吗?提前谢谢。