Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ QObject * parent = 0 - возможен ли доступ к его методам из дочернего объекта ?

Автор: Diem 14.3.2009, 12:15

При создании экземпляра QObject можно передать объект-родитель, при разрушении которого будет разрушен и данный экземпляр QObject.
Но возможен ли доступ из дочернего объекта к мтодам этого самого родителя ?
value = parent()->getSomeInfo();
даёт ошибку: ‘class QObject’ has no member named ‘getSomeInfo’

Или если я поставлю в конструкторе в место типа QObject* для parent - MyClass*, будет ли дочерний объект разрушатся при разрушении parent ?

Автор: BRE 14.3.2009, 12:25

Цитата(Diem @ 14.3.2009, 12:15) *
При создании экземпляра QObject можно передать объект-родитель, при разрушении которого будет разрушен и данный экземпляр QObject.
Но возможен ли доступ из дочернего объекта к мтодам этого самого родителя ?
value = parent()->getSomeInfo();
даёт ошибку: ‘class QObject’ has no member named ‘getSomeInfo’

Или если я поставлю в конструкторе в место типа QObject* для parent - MyClass*, будет ли дочерний объект разрушатся при разрушении parent ?


Цитата из assistant:
Цитата
T qobject_cast ( QObject * object )
Returns the given object cast to type T if the object is of type T (or of a subclass); otherwise returns 0.
The class T must inherit (directly or indirectly) QObject and be declared with the Q_OBJECT macro.
A class is considered to inherit itself.
Example:
QObject *obj = new QTimer; // QTimer inherits QObject

QTimer *timer = qobject_cast<QTimer *>(obj);
// timer == (QObject *)obj

QAbstractButton *button = qobject_cast<QAbstractButton *>(obj);
// button == 0
The qobject_cast() function behaves similarly to the standard C++ dynamic_cast(), with the advantages that it doesn't require RTTI support and it works across dynamic library boundaries.
qobject_cast() can also be used in conjunction with interfaces; see the Plug & Paint example for details.
Warning: If T isn't declared with the Q_OBJECT macro, this function's return value is undefined.


MyClass *p = qobject_cast<MyClass*>( parent() );
p->getSomeInfo();

Автор: Litkevich Yuriy 14.3.2009, 12:29

Цитата(Diem @ 14.3.2009, 15:15) *
даёт ошибку: ‘class QObject’ has no member named ‘getSomeInfo’
приведи свой код.

Автор: Diem 14.3.2009, 12:48

Спасибо, qobject_cast - как раз то что нужно!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)