Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
3 / 3 / 2
Регистрация: 19.07.2015
Сообщений: 74
1

Доступ к родительскому элементу и его методам из дочернего класса

10.06.2016, 22:02. Показов 4682. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть класс, описывающий мячик - берется картинка и помещается на родительском виджете Ping. Ниже привожу хедеры и код конструкторов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Ball {
 
public:
    Ball(QWidget * parent);
    ~Ball();
 
  public:
    QRect get_rect();
    QImage & get_image();
 
  private:
    QImage image;
    QRect rect;
    QWidget * m_parent;
    Ping * ping;
        };
 
Ball::Ball(QWidget * parent)
{
    image.load("ball.png");
    rect=image.rect();
    reset_state();
 
   m_parent=parent;
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Ping : public QWidget
{
Q_OBJECT
 
public:
Ping(QWidget * parent=0);
private:
 Ball * ball;
}
 
Ping::Ping(QWidget * parent) : QWidget(parent)
{
 
    ball=new Ball(this);
}
Проблема в следующем. Мне необходимо, чтобы объект Ball имел данные о своем родители - для этого указатель на родителя хранится в одном из членов. Этот член инициируется в конструкторе. Когда в конструкторе родительского виджета создается объект Ball, ему передается указатель на родителя через this.
Однако, что-то работает не так, так как когда позже я пытаюсь получить значения ширины и высоты родительского виджета через m_parent->width(), компиляция прерывается...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2016, 22:02
Ответы с готовыми решениями:

Обращение к родительскому элементу для текущего дочернего элемента
Хотел спросить, есть код вида <div class="item"> <table> <tr> ...

Как из класса получить доступ к элементу дочернего окна главной формы?
Есть структура MDI - Главная форма-дочерняя. И есть класс. Из класса мне нужно получить данные о...

UserControl получить доступ к родительскому элементу
Как получить доступ к родительскому элементу из UserControl элемента ? Есть два контрола: ...

Получение доступа к методам дочернего класса через указатель на родительский, хранимый в vector
Была подобная тема с list'ом, но решение, предложенное там, мне не помогло. Соль проблемы...

8
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
10.06.2016, 22:34 2
Цитата Сообщение от parsecer Посмотреть сообщение
компиляция прерывается
Что это значит? Какой текст ошибки? И где ты получаешь ширину? В примере не видно.
1
3 / 3 / 2
Регистрация: 19.07.2015
Сообщений: 74
10.06.2016, 22:36  [ТС] 3
"Unexpectedly shut down", выскакивает предупреждение Windows и предложение отправить отчет. Думаю, что-то с памятью и указателями не так...

Ширина используется в одном из методов Ball (не в конструкторе).
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
10.06.2016, 22:40 4
Из того фрагмента, что ты привёл, ничего не ясно.
0
3 / 3 / 2
Регистрация: 19.07.2015
Сообщений: 74
10.06.2016, 22:55  [ТС] 5
C++
1
2
3
4
5
void Ball::reset_state()
{
    rect.moveTo(200, 41);
    m_parent->width();
}
Это упрощенно. Вообще нужно, чтобы, в зависимости от ширины окна Ball помещался посередине. Но даже простое обращение к методу все прерывает.
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
11.06.2016, 00:19 6
Цитата Сообщение от parsecer Посмотреть сообщение
Это упрощенно. Вообще нужно, чтобы, в зависимости от ширины окна Ball помещался посередине. Но даже простое обращение к методу все прерывает.
Ну так правильно. Вы m_parent->width(); вызываете раньше, чем m_parent=parent;
0
3 / 3 / 2
Регистрация: 19.07.2015
Сообщений: 74
11.06.2016, 00:38  [ТС] 7
Присваивание же выполняется в конструкторе Ball..
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
11.06.2016, 09:24 8
Лучший ответ Сообщение было отмечено parsecer как решение

Решение

Цитата Сообщение от parsecer Посмотреть сообщение
Присваивание же выполняется в конструкторе Ball..
Как и вызов функции reset_state.
1
3 / 3 / 2
Регистрация: 19.07.2015
Сообщений: 74
11.06.2016, 18:38  [ТС] 9
Ох, спасибо! Не заметил этого совсем.
0
11.06.2016, 18:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2016, 18:38
Помогаю со студенческими работами здесь

Как получить доступ к методам класса, который содержится в векторе класса
Пишу дерево с любым количеством наследников. В классе Thread содержится вектор классов Thread. При...

Доступ к элементам и методам класса из другого класса
Пишу и понимаю, что создаю, наверняка, давно избитую тему, но вот уже второй день пытаюсь найти...

Доступ к методам производного класса
Есть базовый класс CJobGeneral. В нём описано несколько методов. Есть унаследованный от него...

Доступ к структуре из дочернего класса
В такой форме не получается, в чём проблема? Добавлено через 31 минуту файл strucrures.h ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru