Russian Qt Forum

Qt => Общие вопросы => Тема начата: vana от Апрель 02, 2010, 14:33



Название: QObject::setParent() и QWidget::setParent()
Отправлено: vana от Апрель 02, 2010, 14:33
Только начал изучать библиотеку. Обнаружил, что QWidget перегружает setParent() с новой сигнатурой. Протестировал следующий код:
Код:
QObject* pParent = new QObject();
QWidget* pSender = new QWidget();
static_cast<QObject*>(pSender)->setParent(pParent);
поймал ассерт: "ASSERT: '!d->isWidget' in file kernel\qobject.cpp"
Выходит, задумано так, что произвольный объект не может отвечать за время жизни виджета.
Зачем? Или это просто баг?


Название: Re: QObject::setParent() и QWidget::setParent()
Отправлено: BRE от Апрель 02, 2010, 14:59
Выходит, задумано так, что произвольный объект не может отвечать за время жизни виджета.
Не может.
Для определения этого достаточно взглянуть на конструкторы:
QObject::QObject ( QObject * parent = 0 )
QWidget::QWidget ( QWidget * parent = 0, Qt::WindowFlags f = 0 )

В виджетах отношения parent <-> child сложнее.