2015-10-16 3 views
0

Предположим, у меня есть TestComponent.qml, который использует псевдоним для дочерних элементов. Файл компонента выглядит следующим образом:Как динамически добавлять дочерние элементы в элемент 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++.

ответ

0

Он не отвечает на вопрос, но может быть вокруг этого, чтобы сделать предполагаемый родительский элемент в компоненте доступным через псевдоним свойства и использовать его в качестве родительского параметра в вызове функции 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 
Смежные вопросы