Russian Qt Forum
Октябрь 02, 2024, 07:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к методам parentWidget  (Прочитано 3500 раз)
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’
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Октябрь 23, 2011, 20:30 »

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

>>Хотя это будет работать, это все равно "плохое программирование", каждое такое приведение - минус для репутации программиста

А как по-правильному делать?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Октябрь 23, 2011, 20:41 »

А как по-правильному делать?
Этого я не знаю, в каждом конкретном случае - свое решение  Улыбающийся
Записан
Странник
Гость
« Ответ #4 : Октябрь 23, 2011, 21:04 »

А как по-правильному делать?
по-хорошему родительский объект может использовать методы дочерних, но не наоборот. опишите задачу, зачем дочернему виджету вызывать метод родительского?
Записан
TaIRou
Гость
« Ответ #5 : Октябрь 23, 2011, 21:05 »

передай указатель сразу в конструкторе
child_widget::child_widget ( parent_widget * parent = 0 ) :
QWidget(parent),
pointer_parent_widget(parent)
{
...
}
запомни и используй... ммм?
хотя нормально и с приведением.
« Последнее редактирование: Октябрь 23, 2011, 21:10 от TaIRou » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Октябрь 23, 2011, 21:37 »

Хотя это будет работать, это все равно "плохое программирование", каждое такое приведение - минус для репутации программиста
Имхо, минус не в приведении, а в том, что потомок дёргает создателя.

2 qt_beginner
Зачем постишь в тему, к которой вопрос не имеет отношения?
« Последнее редактирование: Октябрь 23, 2011, 21:39 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Октябрь 24, 2011, 09:57 »

Имхо, минус не в приведении, а в том, что потомок дёргает создателя.
Да, так будет точнее. Вообще это один из самых популярных вопросов (часто с нехорошим словом "форма") который по существу сводится к "а как же правильно программировать?"  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.182 секунд. Запросов: 23.