Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qt_beginner от Октябрь 23, 2011, 20:14



Название: Доступ к методам parentWidget
Отправлено: qt_beginner от Октябрь 23, 2011, 20:14
Такая проблема возникла.

Создаю в родительском виджете новый виджет.
child_widget*  c_w = new child_widget(this);

Не могу получить доступ к методу родительского виджета из child_widget:

this->parentWidget()->test_method();

Компилятор выдаёт ошибку, что такого метода не существует:
@ ошибка: ‘class QWidget’ has no member named ‘test_method’


Название: Re: Доступ к методам parentWidget
Отправлено: Igors от Октябрь 23, 2011, 20:30
Правильно говорит т.к. parent возвращает указатель на QWidget, надо "приводиться"
Код
C++ (Qt)
child_widget * ch = dynamic_cast <child_widget *> parentWidget();
if (ch)
ch->test_method();
else {
// промахнулись :-)
}
 
Хотя это будет работать, это все равно "плохое программирование", каждое такое приведение - минус для репутации программиста


Название: Re: Доступ к методам parentWidget
Отправлено: qt_beginner от Октябрь 23, 2011, 20:32
>>Хотя это будет работать, это все равно "плохое программирование", каждое такое приведение - минус для репутации программиста

А как по-правильному делать?


Название: Re: Доступ к методам parentWidget
Отправлено: Igors от Октябрь 23, 2011, 20:41
А как по-правильному делать?
Этого я не знаю, в каждом конкретном случае - свое решение  :)


Название: Re: Доступ к методам parentWidget
Отправлено: Странник от Октябрь 23, 2011, 21:04
А как по-правильному делать?
по-хорошему родительский объект может использовать методы дочерних, но не наоборот. опишите задачу, зачем дочернему виджету вызывать метод родительского?


Название: Re: Доступ к методам parentWidget
Отправлено: TaIRou от Октябрь 23, 2011, 21:05
передай указатель сразу в конструкторе
child_widget::child_widget ( parent_widget * parent = 0 ) :
QWidget(parent),
pointer_parent_widget(parent)
{
...
}
запомни и используй... ммм?
хотя нормально и с приведением.


Название: Re: Доступ к методам parentWidget
Отправлено: GreatSnake от Октябрь 23, 2011, 21:37
Хотя это будет работать, это все равно "плохое программирование", каждое такое приведение - минус для репутации программиста
Имхо, минус не в приведении, а в том, что потомок дёргает создателя.

2 qt_beginner
Зачем постишь в тему, к которой вопрос не имеет отношения?


Название: Re: Доступ к методам parentWidget
Отправлено: Igors от Октябрь 24, 2011, 09:57
Имхо, минус не в приведении, а в том, что потомок дёргает создателя.
Да, так будет точнее. Вообще это один из самых популярных вопросов (часто с нехорошим словом "форма") который по существу сводится к "а как же правильно программировать?"  :)