Как загрузить один и тот же файл QML и передать им разные свойства

#qt #qml

#qt #qml

Вопрос:

У меня есть один файл index.qml, который состоит из двух прямоугольников, которые заполняют экран в пропорциях ~ 3: 1. В обоих из них я загружаю одно и то же окно.файл qml. Что мне нужно, так это присвоить разные значения свойству ORIENT so window.qml будет вести себя немного по-другому.

Посмотрите на пример ниже. Этот ОРИНЕТ просто показывает, чего я хотел бы достичь…

index.qml

 Rectangle {
    id: rootA
    anchors.left: parent.left
    anchors.top: parent.top
    width: parent.width * 0.65

    // set some property or function so it will be seen in loaded window.qml
    // sth like:
    property ORINET: "horizontal"

    Loader {
        anchors.left: parent.left; anchors.top: parent.top;
        anchors.right: parent.right; anchors.bottom: parent.bottom
        source: "window.qml"
    }
}

Rectangle {
    id: rootB
    anchors.right: parent.right
    anchors.top: parent.top
    width: parent.width * 0.35

    // set some property or function so it will be seen in loaded window.qml
    // sth like:
    property ORINET: "vertical"

    Loader {
        anchors.left: parent.left; anchors.top: parent.top;
        anchors.right: parent.right; anchors.bottom: parent.bottom
        source: "window.qml"
    }
}
 

окно.qml

 Rectangle {
    id: windowBox
    state [
        ...
    ]
    ...
    Component.onCompleted: {
        windowBox.state = ORINET
    }
}
 

Ответ №1:

В соответствии с этой документацией вы можете присвоить свойство Loader , которое также будет доступно для загруженного элемента:

 Loader {
    anchors.fill: parent
    property int ORINET: "vertical
    source: "window.qml"
}
 

window.qml:

 Rectangle {

    states: [
        ...
    ]
    state: ORINET
}
 

Пожалуйста, обратите внимание, что в QtCreator state: ORINET он может выглядеть курсивным и синим, как будто его не существует, но это всего лишь редактор

Комментарии:

1. Я не адаптировался к вашему примеру, потому что я не совсем понимаю, как вы планируете использовать состояние, это механизм состояний QML или нет?

2. @pi.314 Я отредактировал свой ответ, чтобы лучше отразить вашу ситуацию. Пожалуйста, также обратите внимание, что вы можете просто сделать anchors.fill: parent вместо всех четырех сторон по отдельности 😉