Russian Qt Forum
Октябрь 01, 2024, 18:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение ссылки на qml элемент в C++  (Прочитано 7761 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Июль 12, 2012, 13:28 »

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

На вскидку - создать Q_INVOKABLE метод для контекста, который принимает аргументом QObject*. Далее вызвать этот метод из qml и передать в него id нужного объекта.

А вообще, для любого QObject можно вызвать метод findChild, который найдет нужный объект-потомок по его objectName.
Записан
mutineer
Гость
« Ответ #2 : Июль 13, 2012, 13:59 »

http://doc.crossplatform.ru/qt/4.7.x/html-qt/qtbinding.html#locating-child-objects
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Июль 13, 2012, 16:19 »

Спасибо за советы, сделал конечно немного по другому, просто в Component.onComplete передавал в С++ часть нужный элемент. Но и вариант с поиском тоже есть вот псевдокод

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

единственное но, id в qml не равен objectName ))) вообщем поэтому и сделал через Component.onComplete
Записан
mutineer
Гость
« Ответ #4 : Июль 13, 2012, 16:25 »

view->rootObject() возвращает один объект. Зачем по нему делать foreach?
В qml можно установить objectName. По ссылке, которую я дал, это видно
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #5 : Июль 14, 2012, 22:07 »

foreach конечно же не по rootObject() Улыбающийся а скорее так

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

писал быстро, поторопился ))) насчет objectName видел, но к тому моменту уже сделал по другому. Кстати пока был не вкурсе про objectName, искал у какого класса свойство id задается , был уверен что у QDeclarativeItem ,но почему то там не нашел.
Записан
meandnano
Гость
« Ответ #6 : Июль 16, 2012, 10:37 »

Справедливости ради надо сказать, что objectName - свойство общее для всех QObject*. Если вы в дизайнере рисуете UI, то обращение к виджетам (как правило) тоже делается через objectName, только не через поиск (хотя можно и так), а примерно как ui->mySuperObject.
Записан
mutineer
Гость
« Ответ #7 : Июль 16, 2012, 10:48 »

Справедливости ради надо сказать, что objectName - свойство общее для всех QObject*. Если вы в дизайнере рисуете UI, то обращение к виджетам (как правило) тоже делается через objectName, только не через поиск (хотя можно и так), а примерно как ui->mySuperObject.
Какбы нет. ui->mySuperObject -  обращение к члену объекта ui с именем mySuperObject. С objectName это если и связано, то только тем, что генерируемое имя члена ui-класса равно его objectName
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.