4

子項目のエイリアスを使用する TestComponent.qml があるとします。コンポーネント ファイルは次のようになります。

TestComponent.qml

import QtQuick 2.5
Column {
    default property alias children: cont.children;

    Text {
        text: "header"
    }
    Column {
        id: cont
    }
    Text {
        text: "footer"
    }
}

次に、コンポーネントをインスタンス化するメイン ファイルを作成します。静的コンポーネントのインスタンス化を介して子コンポーネント Text を追加すると、期待どおりにヘッダーとフッターの間に表示されます。ただし、子コンポーネントを動的に追加すると、子のエイリアスは無視され、フッターの後に子が追加されます。ファイルは次のようになります。

main.qml

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
    visible: true
    width: 200
    height: 200

    TestComponent {
        id: t1
        Text {
            text: "body"
        }
    }
    Component {
        id: txt
        Text {
            text: "body1"
        }
    }
    Component.onCompleted: {
        txt.createObject(t1)
    }
}

出力は次のとおりです。

header
body
footer
body1

動的コンポーネントの作成に対してエイリアスも透過的になるようにする方法はありますか? C++ を使用しないのが理想的です。

4

1 に答える 1

2

質問には答えませんが、これを回避する方法は、コンポーネント内の目的の親アイテムにプロパティ エイリアスを介してアクセスできるようにし、それを createObject 関数呼び出しの親パラメーターとして使用することです。ここにコードがあります

TestComponent.qml

import QtQuick 2.5
Column {
    default property alias children: cont.children;
    property alias childCont: cont

    Text {
        text: "header"
    }
    Column {
        id: cont
    }
    Text {
        text: "footer"
    }
}

main.qml

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
    visible: true
    width: 200
    height: 200

    TestComponent {
        id: t1
        Text {
            text: "body"
        }
    }
    Component {
        id: txt
        Text {
            text: "body1"
        }
    }
    Component.onCompleted: {
        txt.createObject(t1.childCont)
    }
}

出力:

header
body
body1
footer
于 2015-10-16T02:22:24.520 に答える