Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Владислав от Май 24, 2013, 00:15



Название: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Владислав от Май 24, 2013, 00:15
Не подскажете чем такое ограничение вызвано в Qt?

мне кажется нелогичным такая особенность.

QWidget * widget = new QWidget
QObject * object = new QObject;

//widget->setParent( object );// ошибка
object->setParent( widget );// вот так - нет ошибки


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Alex Custov от Май 24, 2013, 01:19
потому что QWidget - это визуальный объект, и должен иметь родителем другой визуальный объект.


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Странник от Май 24, 2013, 08:21
потому что QWidget - это визуальный объект, и должен иметь родителем другой визуальный объект.
или быть сиротой, если это окно верхнего уровня. все более чем логично.


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Владислав от Май 24, 2013, 08:35
На мой взгляд такая обособленность QWidget в архитектуре Qt - это не логично потому, что QWidget - наследник QObject .

И "визуальность" объекта не даёт объяснения этой особенности - "визуальность" объекта для разработчика ПО ,в смысле воздействия на ПК, тоже что и обращение к любым другим ресурсам ПК.
 


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Bepec от Май 24, 2013, 09:07
Вы знаете про разделение интерфейса и расчётной части?

Если нет- советую почитать. Тогда поймёте, что разделение UI и расчётов это необходимость.


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: GreatSnake от Май 24, 2013, 09:35
На мой взгляд такая обособленность QWidget в архитектуре Qt - это не логично потому, что QWidget - наследник QObject .
Помимо этого QWidget является ещё и наследником QPaintDevice.


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Странник от Май 24, 2013, 09:37
На мой взгляд такая обособленность QWidget в архитектуре Qt - это не логично потому, что QWidget - наследник QObject .

И "визуальность" объекта не даёт объяснения этой особенности - "визуальность" объекта для разработчика ПО ,в смысле воздействия на ПК, тоже что и обращение к любым другим ресурсам ПК.
попробуйте внятно мне объяснить, зачем вам делать QObject родителем QWidget, а потом мы вместе посмеемся.


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Владислав от Май 24, 2013, 09:49
Хотел для автоматического освобождения ресурсов.


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: GreatSnake от Май 24, 2013, 10:03
Хотел для автоматического освобождения ресурсов.
Код
C++ (Qt)
connect( object, SIGNAL( destroyed() ), widget, SLOT( deleteLater() ) );


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Igors от Май 24, 2013, 11:22
Предположим была бы такая иерархия QWidget->QObject-QWidget->,,
Пользователь ресайзит окно, что должно происходить учитывая что звено QObject ничего с UI делать не умеет?


Название: Re: Почему нельзя установить у QWidget родителем QObject ?
Отправлено: Владислав от Май 24, 2013, 11:40
Да, наверое в этом ограничении есть свой смысл. Благодарю всех!

За подсказку с поздним удалением - интересное предложение.