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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать что qml-элемент уже создался  (Прочитано 6806 раз)
Sasha
Гость
« : Апрель 09, 2012, 16:55 »

Здравтвуйте,

Есть класс:
Код:
class CMyItem : public QDeclarativeItem
{
...
}
Он доступен при помощи ф-ии qmlRegisterType в QML:
Код:
qmlRegisterType<CMyItem>("MyItems", 1, 0, "MyItem");
В QML создан его объект:
Код:
import MyItems 1.0
import QtQuick 1.0

Item {
    width: 300; height: 200

    MyItem{
        width: 100; height: 100
        text: "text"
        ...
    }
}

Как в QtC++ коде узнать, что создан объект класса CMyItem? Точнее, как это узнать в тот момент, когда он создан. Ну т.е. что-то типа уведомления onCreate.
Записан
mutineer
Гость
« Ответ #1 : Апрель 09, 2012, 16:56 »

я в свое время искал, но не нашел такого. И тут тоже тогда никто не знал
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


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


Просмотр профиля
« Ответ #2 : Апрель 09, 2012, 16:58 »

Ну так в голову пришло, в конструкторе CMyItem сигнал сэмитить например:)
Записан
mutineer
Гость
« Ответ #3 : Апрель 09, 2012, 16:59 »

Ну так в голову пришло, в конструкторе CMyItem сигнал сэмитить например:)

дело в том, что конструктор это еще не создание объекта. после конструктора еще пропертям начальные значения выставляются
Записан
Sasha
Гость
« Ответ #4 : Апрель 09, 2012, 17:07 »

Кажется нашёл.
Нужно переопределить
Код:
virtual void componentComplete()
Записан
mutineer
Гость
« Ответ #5 : Апрель 09, 2012, 17:08 »

Кажется нашёл.
Нужно переопределить
Код:
virtual void componentComplete()

и он выполнится после сета всех пропертей?
Записан
Sasha
Гость
« Ответ #6 : Апрель 09, 2012, 17:11 »

и он выполнится после сета всех пропертей?
Да, только что проверил, подставив в эту ф-ю вывод свойств при помощи QMessageBox::information(...)
Записан
mutineer
Гость
« Ответ #7 : Апрель 09, 2012, 17:12 »

и он выполнится после сета всех пропертей?
Да, только что проверил, подставив в эту ф-ю вывод свойств при помощи QMessageBox::information(...)

Класс, спасибоУлыбающийся

А, блин, мне не подойдет - у меня наследник QObject, а не QDeclarativeItem...
« Последнее редактирование: Апрель 09, 2012, 17:15 от mutineer » Записан
Sasha
Гость
« Ответ #8 : Апрель 09, 2012, 17:27 »

А, блин, мне не подойдет - у меня наследник QObject, а не QDeclarativeItem...

ф-я virtual void componentComplete() изначально определена в QDeclarativeParserStatus, которого наследует QDeclarativeItem, так что, возможно ты можешь его просто снаследовать дополнительно к QObject

Кстати, только что проверил снаследовавшись от QObject и QDeclarativeParserStatus. Тоже получилось
« Последнее редактирование: Апрель 09, 2012, 17:38 от Sasha » Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #9 : Апрель 29, 2012, 16:48 »

а если по сигналу Component.onCompleted: флаг "создался" менять или сигнал парента инициализировать?
« Последнее редактирование: Апрель 29, 2012, 16:50 от IGHOR » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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