kontiki
kontiki

Reputation: 216

How to set an item property of one qml from main.qml

I waste my time to find how set the visible property to false, the delegate being in an another qml file.

For instance here is a simple example based on Places Map.

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"
        }
    }
}

and the 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
            }
        }
    }
}

I wish to toggle the visibility to false on doubleclick. I am not able to access the property anyhow the way i write it. What is the correct syntax?

Sorry for a so simple question. Thanks for help.

Upvotes: 2

Views: 1382

Answers (1)

eyllanesc
eyllanesc

Reputation: 243897

You do not have to set the property in main.qml, you must do it in Marker.qml, since the elements of Marker.qml can access all the elements of main.qml. One solution is to establish a property of type bool that manages the visibility and that changes in the double click:

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"
        }
    }
}

In the following link there is an example

Upvotes: 1

Related Questions