Russian Qt Forum

Qt => Qt Quick => Тема начата: Sasha от Апрель 09, 2012, 16:55



Название: Как узнать что qml-элемент уже создался
Отправлено: 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.


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: mutineer от Апрель 09, 2012, 16:56
я в свое время искал, но не нашел такого. И тут тоже тогда никто не знал


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: ecspertiza от Апрель 09, 2012, 16:58
Ну так в голову пришло, в конструкторе CMyItem сигнал сэмитить например:)


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: mutineer от Апрель 09, 2012, 16:59
Ну так в голову пришло, в конструкторе CMyItem сигнал сэмитить например:)

дело в том, что конструктор это еще не создание объекта. после конструктора еще пропертям начальные значения выставляются


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: Sasha от Апрель 09, 2012, 17:07
Кажется нашёл.
Нужно переопределить
Код:
virtual void componentComplete()


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: mutineer от Апрель 09, 2012, 17:08
Кажется нашёл.
Нужно переопределить
Код:
virtual void componentComplete()

и он выполнится после сета всех пропертей?


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: Sasha от Апрель 09, 2012, 17:11
и он выполнится после сета всех пропертей?
Да, только что проверил, подставив в эту ф-ю вывод свойств при помощи QMessageBox::information(...)


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: mutineer от Апрель 09, 2012, 17:12
и он выполнится после сета всех пропертей?
Да, только что проверил, подставив в эту ф-ю вывод свойств при помощи QMessageBox::information(...)

Класс, спасибо:)

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


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: Sasha от Апрель 09, 2012, 17:27
А, блин, мне не подойдет - у меня наследник QObject, а не QDeclarativeItem...

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

Кстати, только что проверил снаследовавшись от QObject и QDeclarativeParserStatus. Тоже получилось


Название: Re: Как узнать что qml-элемент уже создался
Отправлено: IGHOR от Апрель 29, 2012, 16:48
а если по сигналу Component.onCompleted: флаг "создался" менять или сигнал парента инициализировать?