Название: Связать свойства динамически создаваемых объектов Отправлено: chu от Февраль 20, 2012, 01:54 Имеются два типа компонентов: прямоугольники, динамически создаваемые при клике по сцене, и линии, динамически создаваемые при клике на пару прямоугольников. Нужно связать их координаты, чтобы при перемещении прямоугольника, конец связной с ним линии перемещался вслед за ним.
main.qml Код: import QtQuick 1.0 Item.qml Код: import QtQuick 1.0 Line.qml Код: import QtQuick 1.0 Название: Re: Связать свойства динамически создаваемых объектов Отправлено: kvrus от Февраль 24, 2012, 09:34 Привет.
Ничего не могу найти хорошего с этими динамически создающимися объектами. Получается так: динамически создавать объекты можно, но вот делать с ними анимацию или какие нибудь соединения сигналов или изменение свойств ты не сможешь. В примерах динамически создаются объекты в *.js файлах , сразу заносятся в массивы и дальнейшая логика программы может изменять свойства этих объектов только путем перебора всех элементов массива в функции js. Перерисовка объектов так же делается в js по событию таймера и без всяких там эффектов типа EasyCurve. У меня складывается такой вывод Если надо рисовать интерфейсы - то либо ты должен заранее знать все свои элементы и создать их один раз, описав их в QML, либо использовать модели для создания произвольного числа элементов (но с объектами в модели так же анимацию не сделаешь, можно поменять свойства через обращение к index из функции js). Если надо разработать игру - то в js создавай динамические объекты и сам определяй событие перерисовки (движение в игре) и всякие коллизии между объектами и их свойства. Соответственно связи между свойствами объектов тоже придется писать самому в функции JS. Название: Re: Связать свойства динамически создаваемых объектов Отправлено: kvrus от Февраль 24, 2012, 11:16 Попробуй сделать так:
Rectangle { id: sprite width: 25; height: 25 x: 50; y: 15 onXChanged: console.log("x property changed, emitted xChanged signal") onYChanged: console.log("y property changed, emitted yChanged signal") } То есть динамически созданному объекту назначь сигнал на изменение координаты (я так понял можно таким образом сигналы создавать на изменение любого свойства элемента). В обработчике вызови функцию js в которой обработай ситуацию изменения свойства и из скрипта измени свойство того объекта который надо было связать (но вытащить объект можно только перебором по массиву всех объектов). Название: Re: Связать свойства динамически создаваемых объектов Отправлено: OKTA от Февраль 28, 2012, 00:43 http://developer.qt.nokia.com/wiki/QML-Dynamic-Objects
да можно там все))) Название: Re: Связать свойства динамически создаваемых объектов Отправлено: chu от Февраль 28, 2012, 22:33 OKTA, спасибо за ссылку. Прочитал, но ответа на свой вопрос не нашел... Если не сложно, объясни пожалуйста какое решение ты имел ввиду.
Пока сделал по совету kvrus, за что ему огромное спасибо :) Добавил в item свойство num (порядковый номер), и обработку смены координат: Код: onXChanged: posChanged(item.num,item.x,item.y) Код: import QtQuick 1.0 Изменил line.qml : Код: import QtQuick 1.0 Название: Re: Связать свойства динамически создаваемых объектов Отправлено: OKTA от Февраль 29, 2012, 12:39 Ну суть какая))) СУть в том, чтобы передавать данные между имеющимся объектом и динамически созданном объектом, верно?)
Так вот есть пара механизмов основных для этого) например: 1. ДСО доступны функции и сигналы его "родителя" 2. ДСО может обращаться к свойствам своего родителя по ссылке прочитай главу "Communication with Dynamic Objects" - в ней эти 2 случая и разобораны на двух примерах =)) Этого будет более, чем достаточно!!! (= Название: Re: Связать свойства динамически создаваемых объектов Отправлено: chu от Февраль 29, 2012, 13:27 Ну суть какая))) СУть в том, чтобы передавать данные между имеющимся объектом и динамически созданном объектом, верно?) Нет. Суть в том, чтобы передавать данные между двумя различными динамически созданными объектами.Похоже что, красивее метода, описанного в моем предыдущем посте, ничего не найти... Название: Re: Связать свойства динамически создаваемых объектов Отправлено: OKTA от Февраль 29, 2012, 16:01 Ну так чего жизнь усложнять, пускай линии твои создаются внутри прямоугольников!)) это же самое простое решение!!! =)))
Название: Re: Связать свойства динамически создаваемых объектов Отправлено: chu от Февраль 29, 2012, 18:49 Ну так чего жизнь усложнять, пускай линии твои создаются внутри прямоугольников!)) это же самое простое решение!!! =))) И каким образом соединить созданную внутри прямоугольника линию с другим прямоугольником ???Изначально я так и хотел сделать, но ничего не вышло, линия рисуется только в пределах прямоугольника!!! |