如何从main.qml设置一个qml的item属性

时间:2018-01-06 11:30:46

标签: qt qml qt5

我浪费时间来查找如何将visible属性设置为false,将委托放在另一个qml文件中。

例如,这是一个基于位置图的简单示例。

Marker.qml

import QtQuick 2.0
import QtLocation 5.6

MapQuickItem {
    id: idPointsMarker

    sourceItem: Loader{sourceComponent: idRect}

    visible: true //if set manually to false, everything works correctly

    Component{
        id: idRect
        Rectangle{
            width: 20
            height: 20
            color: "blue"
        }
    }
}

和main.qml

import QtQuick 2.0
import QtQuick.Window 2.0
import QtLocation 5.6
import QtPositioning 5.6

Window {
    width: 512
    height: 512
    visible: true

    PositionSource {
        ...
    }

    property variant locationOslo: QtPositioning.coordinate( 59.93, 10.76)


    PlaceSearchModel {
        ...
    }

    Map {
        id: map
        anchors.fill: parent
        plugin: Plugin {name: "osm"}
        center: locationOslo
        zoomLevel: 13

        MouseArea {
            id : mouseMap
            anchors.fill: parent
            onDoubleClicked: {
                console.log("DoubleClicked")
                Marker.idPointsMarker.visible = false // pb is here

            }
        }

        MapItemView {
            model: searchModel
            delegate: Marker{
                coordinate: place.location.coordinate
            }
        }
    }
}

我希望在doubleclick上将可见性切换为false。我无论如何都无法以我的方式访问该属性。什么是正确的语法?

抱歉这么简单的问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您不必在main.qml中设置属性,必须在Marker.qml中进行,因为Marker.qml的元素可以访问main.qml的所有元素。一种解决方案是建立一个bool类型的属性来管理可见性和双击中的更改:

<强> main.qml

Map {
    [...]
    property bool isVisibleItems: true

    MouseArea {
        id : mouseMap
        anchors.fill: parent
        onDoubleClicked: map.isVisibleItems = !map.isVisibleItems
    }
    [...]

<强> Marker.qml

import QtQuick 2.0
import QtLocation 5.6

MapQuickItem {
    id: idPointsMarker
    sourceItem: Loader{sourceComponent: idRect}
    visible: map.isVisibleItems

    Component{
        id: idRect
        Rectangle{
            width: 20
            height: 20
            color: "blue"
        }
    }
}

在以下link中有一个示例