gpt4 book ai didi

c++ - 在 QML 中的 VideoOutput 上显示用 C++ 创建的相机

转载 作者:行者123 更新时间:2023-11-28 04:08:16 24 4
gpt4 key购买 nike

我在将用 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
}
}

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

最佳答案

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

我有一个 QCamera 的包装类,可以做一些其他的事情。其中,有一个公共(public)插槽可以从 QML 设置相机取景器。

void MyCamClass::setViewFinder(QObject *vf)
{
if(Camera)
Camera->setViewfinder(qobject_cast<QAbstractVideoSurface *>(vf));
}

在 QML 端,您将有一个

VideoOutput {
id: vOutput
}

如果你想激活你的相机,你可以调用:

mCamera->setviewFinder(vOutput.videoSurface);

mCamera是MyCamClass类的对象,注册到QML环境。
确保在设置取景器之前启动相机。

关于c++ - 在 QML 中的 VideoOutput 上显示用 C++ 创建的相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58320872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com