我正在使用Qt在Android上使用面部识别应用。我的ui中有一个QtQuickWidget;设法使QtQuick相机工作;但无法在C ++中获取帧。
我尝试了答案Qt QML Camera to C++ QImage on Android,它看起来像问题的“解决方案”但是:ui> quickWidget-> rootObject() - > childItems()没有相机项目。它有所有其他项目(button1,vf)。所以findChild失败了。
要求对此提出一些启示。提前致谢。 QML:
import QtQuick 2.5
import QtMultimedia 5.5
Item {
id: camvf
Camera {
id: cam
objectName: "cam"
}
VideoOutput {
id: vf
objectName: "vf"
source: cam
width: parent.width
height: parent.height-100
anchors.top: parent.top
focus : visible // to receive focus and capture key events when visible
autoOrientation: true
}
Rectangle {
id: button1
objectName: "button1"
anchors.top:vf.bottom
width: parent.width
height: 100
}
}
答案 0 :(得分:0)
documentation for Camera
表示它来自QtObject
,这意味着childItems()
不会包含它,因为它不是视觉类型。您需要改为使用QObject::children()
。
Concepts - Visual Parent in Qt Quick文档解释了所有这些工作原理:
Qt Quick中可视化父级的概念与QObject父级层次结构中对象父级的概念是分开的,但是相关。所有QML对象都有一个对象父对象,它由声明对象的对象层次结构决定。使用QtQuick模块时,Item类型是此模块提供的所有可视项目的基本类型,它提供了另一个可视父项的概念,由项目的父项属性定义。每个项目都有一个视觉父母;如果项目的父属性值为null,则该项目将不会在场景中呈现。
为了进行内存管理,分配给项的数据属性的任何对象都成为其QObject层次结构中项的子对象。此外,如果添加到data属性的对象属于Item类型,则它也会分配给Item :: children属性,并成为可视场景层次结构中项目的子对象。 (大多数Qt Quick层次爬行算法,尤其是渲染算法,只考虑可视父级层次结构。)
如果您有好奇心,here是Qt源代码中要处理Item
子项的问题。