Qt 5: чтение свойства внутри загрузчика

Как прочитать свойство timeout, расположенное внутри объекта Loader в Qt5 QML Quick 2.0?

import QtQuick 2.0

Rectangle {
    width: 100
    height: 100
    color: "black"

    property Component comp1 : Component {
        Rectangle {
            id: abc
            property int timeout: 5000
            width: 10; height: 10;
            color: "red"
        }
    }

    Loader {
        id: loader
        sourceComponent: comp1
    }

    Component.onCompleted: console.log( "timeout: " + loader.item.abc.timeout )
}

TypeError: не удается прочитать свойство «тайм-аут» неопределенного


person Dmitry    schedule 25.12.2013    source источник


Ответы (1)


У вас есть несколько проблем в вашем коде, а именно:

1) Вы не назначаете идентификатор id объекту вашего компонента.

2) Вы пытаетесь унаследовать Component со свойством, которое не нужно в этом простом коде.

3) Вы неправильно используете свойство item для элемента Loader.

4) Вы имеете в виду имя свойства, а не id компонента. Это снова возвращение к ненужному наследству.

Основываясь на официальной документации, вы должны что-то делать как это:

import QtQuick 2.0

Rectangle {
    width: 100
    height: 100
    color: "black"

    Component {
        id: comp1
        Rectangle {
            id: abc
            property int timeout: 5000
            width: 10; height: 10;
            color: "red"
        }
    }

    Loader {
        id: loader
        sourceComponent: comp1
    }

    Component.onCompleted: console.log( "timeout: " + loader.item.timeout )
}
person lpapp    schedule 26.12.2013
comment
Рекомендуется использовать загруженный сигнал в загрузчике, чтобы убедиться, что элемент был загружен, например, если для Loader.asynchronous установлено значение true. В объявлении загрузчика: onLoaded: console.log(timeout:, item.timeout). - person pixelgrease; 12.07.2021