Russian Qt Forum

Qt => Qt Quick => Тема начата: ecspertiza от Июль 12, 2012, 13:28



Название: Получение ссылки на qml элемент в C++
Отправлено: ecspertiza от Июль 12, 2012, 13:28
Пока не могу найти решение, но интересно, можно ли в C++ части получить объект созданный в qml, а еще лучше его QRect() . Например создали в qml Rectangle и в C++ после создания получили ссылку на этот Rectangle и вытащили например его размеры.


Название: Re: Получение ссылки на qml элемент в C++
Отправлено: meandnano от Июль 13, 2012, 13:53
На вскидку - создать Q_INVOKABLE метод для контекста, который принимает аргументом QObject*. Далее вызвать этот метод из qml и передать в него id нужного объекта.

А вообще, для любого QObject можно вызвать метод findChild, который найдет нужный объект-потомок по его objectName.


Название: Re: Получение ссылки на qml элемент в C++
Отправлено: mutineer от Июль 13, 2012, 13:59
http://doc.crossplatform.ru/qt/4.7.x/html-qt/qtbinding.html#locating-child-objects


Название: Re: Получение ссылки на qml элемент в C++
Отправлено: ecspertiza от Июль 13, 2012, 16:19
Спасибо за советы, сделал конечно немного по другому, просто в Component.onComplete передавал в С++ часть нужный элемент. Но и вариант с поиском тоже есть вот псевдокод

Код:
QDeclarativeView view;
foreach (QObject *o, view->rootObject()) {
  blabla
}

единственное но, id в qml не равен objectName ))) вообщем поэтому и сделал через Component.onComplete


Название: Re: Получение ссылки на qml элемент в C++
Отправлено: mutineer от Июль 13, 2012, 16:25
view->rootObject() возвращает один объект. Зачем по нему делать foreach?
В qml можно установить objectName. По ссылке, которую я дал, это видно


Название: Re: Получение ссылки на qml элемент в C++
Отправлено: ecspertiza от Июль 14, 2012, 22:07
foreach конечно же не по rootObject() :) а скорее так

Код:
QDeclarativeView view;
foreach (QObject *o, view->rootObject()->children()) {
  blabla
}

писал быстро, поторопился ))) насчет objectName видел, но к тому моменту уже сделал по другому. Кстати пока был не вкурсе про objectName, искал у какого класса свойство id задается , был уверен что у QDeclarativeItem ,но почему то там не нашел.


Название: Re: Получение ссылки на qml элемент в C++
Отправлено: meandnano от Июль 16, 2012, 10:37
Справедливости ради надо сказать, что objectName - свойство общее для всех QObject*. Если вы в дизайнере рисуете UI, то обращение к виджетам (как правило) тоже делается через objectName, только не через поиск (хотя можно и так), а примерно как ui->mySuperObject.


Название: Re: Получение ссылки на qml элемент в C++
Отправлено: mutineer от Июль 16, 2012, 10:48
Справедливости ради надо сказать, что objectName - свойство общее для всех QObject*. Если вы в дизайнере рисуете UI, то обращение к виджетам (как правило) тоже делается через objectName, только не через поиск (хотя можно и так), а примерно как ui->mySuperObject.
Какбы нет. ui->mySuperObject -  обращение к члену объекта ui с именем mySuperObject. С objectName это если и связано, то только тем, что генерируемое имя члена ui-класса равно его objectName