rootObject-> childItems

时间:2015-11-19 13:16:52

标签: android c++ qt camera qml

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

1 个答案:

答案 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子项的问题。