LINUX.ORG.RU

Как сделать свой объект Qml, который будет содержать другие объекты

 


1

1

Из названия темы наверное несовсем понятно, объясню на примере:

MyObject.qml


import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    anchors.fill: parent

    Rectangle {
        id: rect
        ........
    }
}


main.qml

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    anchors.fill: parent
    MyObject {

        Rectangle {
            id: myRect
        }
    }
}

Вопрос, вот как сделать чтобы заданный myRect в main подгружался в моем объекте в место котороя я отметил многоточием ( т.е внутрь прямоугольника rect)

Зависит от того должен ли myRect передаваться как тип, чтобы MyObject сам его создал и контролировал цикл жизни, или как объект, чтобы MyObject просто разместил его где нужно.

Первый вариант:

// MyObject.qml
Item {
    property Component rect

    Loader {
        anchors.fill: parent
        sourceComponent: rect
    }
}

// main.qml
Window {
    MyObject {
        rect: Rectangle { color: 'blue' }
    }
}

Второй вариант:

// MyObject.qml
Item {
    property Item rect

    Item {
        id: root
        anchors.fill: parent
    }

    Binding {
        target: rect
        property: 'parent'
        value: root
    }
}

// main.qml
Window {
    MyObject {
        rect: Rectangle { color: 'blue' }
    }
}

Пишу с головы, запускать не пробовал.

Dendy ★★★★★ ()