如何从Qt中另一个文件的另一个对象访问一个对象的属性?

时间:2018-12-13 18:35:43

标签: qt qml

假设我有两个文件:

main.qml

import QtQuick 2.0
import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    color: pRect.color

    Red{
        id:pRect
    }
}

和Red.qml

import QtQuick 2.0
Rectangle {
    id: pRect
    color: "red"
    Rectangle{
        id: cRect
        color: "blue"
    }
}

其中main.qml使用Red.qml中父矩形'pRect'的颜色。但是,如果我现在想使用子矩形'cRect'的颜色,则可以尝试类似的方法。

color: pRect.cRect.color

但这不起作用,我有办法访问该颜色值吗?

1 个答案:

答案 0 :(得分:1)

the docs所示:

  

可以在声明对象的组件范围内的任何位置通过其ID引用对象。

也就是说,pRectcRectRed.qml之外没有任何意义。

那为什么要在main.qml中使用pRect?因为您创建了一个具有相同名称的项目,所以如果创建另一个Red项目,则必须放置另一个ID:

Red{
    id:pRect
}

Red{
    id:pRect2
}

所以它认为现在已经坏了:什么是pRect?


因此,唯一的解决方案是将子代的属性公开为父代的属性:

Red.qml

import QtQuick 2.9

Rectangle {
    id: root
    property alias childcolor: child.color
    color: "red"
    Rectangle{
        id: child
        color: "blue"
    }
}

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    color: pRect.childcolor
    Red{
        id:pRect
    }
}

因此,总而言之,组件根元素的子元素的属性是私有的,如果要在外部使用它,则必须使用根属性公开它。