Почему
QMyObject::QMyObject(QObject *parent): QObject( parent )
а не
QMyObject::QMyObject(QObject *parent): QMyBaseClass( parent )
коли QMyObject наследник от QMyBaseClass.
QMyObject НЕ наследник от QMyBaseClass, он наследник от QObject.
Чтобы было проще могу пояснить не абстрактно, а поконкретнее.
Есть свой собственный класс QMyModel - наследник от модели QAbstractItemModel, ну а QAbstractItemModel в итоге от QObject.
Есть другой собственный класс QBaseDataModule - базовый модуль данных, наследник от QObject
В программах используется модуль данных QDataModule, наследник от базового модуля данных.
Идея в том, чтобы в базовый модуль данных перенести код общий для всех своих программ и вынести всё это в библиотеку:
- когда в модуле данных создаются модели с парентом this - этого модуля данных,
я хочу чтобы в базовом модуле данных один из сигналов этих моделей прицеплялся к единому слоту базового модуля данных.
Для этого в базовом модуле данных обработчик
void QBaseDataModule::childEvent( QChildEvent *event )
должен уметь отличать детей (child`ов) через
qobject_cast<QMyModel*> ( event->child() )
но он этого не мог делать т.к. childEvent возникает во время отработки конструктора QObject, а до конструктора QMyModel дело ещё не дошло.
поэтому и пришлось сделать
QMyModel::QMyModel(..., QObject *parent): QAbstractItemModel(0)
{
setParent( parent );
...
}
Теперь цель достигнута.
Когда создаются модели в
QDataModule::QDataModule(QObject *parent): QBaseDataModule( parent )
{
myModel = new QMyModel(..., this);
}
базовый модуль данных в childEvent их уже может отличать от всех других QObject`ов
Вот, собственно, и всё.