Использование parentWidget() |
Здравствуйте, гость ( Вход | Регистрация )
Использование parentWidget() |
IvanYuS |
2.8.2009, 15:11
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 27.7.2009 Пользователь №: 948 Спасибо сказали: 0 раз(а) Репутация: 0 |
программа состоит из двух форм, первая MainForm содержит кнопку Input_Data, которая вызывает другую форму InputForm, которая содержит только кнопку QuitButton, код обработки нажатия на Input_Data:
на второй форме клик на кнопке QuitButton обрабатывается так Больше на формах ничего нет. Программа компилится, первая кнопка работает нормально - появляется вторая форма, при нажатии на вторую кнопку программа вылетает с ошибкой segmentation fault, мне кажется я неправильно обращаюсь с указателем papa, подскажите учащемуся пожалуйста в чем ошибка и как правильно тут поступить. |
|
|
den'ka |
2.8.2009, 15:36
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 8.8.2008 Пользователь №: 258 Спасибо сказали: 4 раз(а) Репутация: 0 |
Ты бы код привел в котором InputForm создается. Ты ему родителя указываешь?
|
|
|
MoPDoBoPoT |
2.8.2009, 16:03
Сообщение
#3
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Все верно, segmentation fault и должен быть. Ты не задал родителя для inputform, а в коде пытаешься работать с ним (родителем), не проверив на его существование (в твоем случае метод parentWidget() возвратит 0).
При создании формы надо задать ей родителя:
Если конструктор класса InputForm не имеет параметров, значит надо чуток подправить его. |
|
|
IvanYuS |
2.8.2009, 16:14
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 27.7.2009 Пользователь №: 948 Спасибо сказали: 0 раз(а) Репутация: 0 |
ui_InputFomr.h - получаю в Qt дизайнере, имя формы выставляю InputForm, вставляю кнопку называю ее QuitButton [code]InputForm *inputform = new InputForm(this);[\code] При добавлении (this) - программа компилится, но при нажатии на кнопку первой формы зависает - кнопка не отживается, окошко не появляется. |
|
|
MoPDoBoPoT |
2.8.2009, 16:18
Сообщение
#5
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Так. А реализация имеет примерно такой вид?
Если да, то надо только родителя(владельца) формы указать при создании:
|
|
|
IvanYuS |
2.8.2009, 16:36
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 27.7.2009 Пользователь №: 948 Спасибо сказали: 0 раз(а) Репутация: 0 |
Да, реализация выглядет подобно, но только при добавлении (this) программа компилится, но не работает должным образом(см выше).
Да, реализация выглядет подобно, но только при добавлении (this) программа компилится, но не работает должным образом(см выше). Раскрывающийся текст
Если в обработчик событий кнопки QuitButton заменить на
то все работает замечательно, не вылетает.... все-таки дело в указателе -( |
|
|
MoPDoBoPoT |
2.8.2009, 17:10
Сообщение
#7
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Теперь проблема не в указателе, а в этом, скорей всего:
Метод QMetaObject::className() возвращает "const char*", а не "QString". Попробуй так:
|
|
|
IvanYuS |
2.8.2009, 17:48
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 27.7.2009 Пользователь №: 948 Спасибо сказали: 0 раз(а) Репутация: 0 |
нет тут правда в указателе дело
Прописывает на кнопке papa=0, понять не могу... как так, я же форму создаю при щелчке на кнопку, у нее же должен быть родитель... И при замене
на
Вторая форма при работе программы не открывается... вот это я совсен монять не могу -( Интересен еще такой вопрос, при создании формы в обработчеке клика на кнопке, кто будет родителем формы, кнопка или форма на которой находится кнопка? |
|
|
MoPDoBoPoT |
2.8.2009, 18:02
Сообщение
#9
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Интересен еще такой вопрос, при создании формы в обработчеке клика на кнопке, кто будет родителем формы, кнопка или форма на которой находится кнопка? Родителем бутет тот, чей указатель будет передан в конструктор формы. У вас пробелы в базовых понятиях. Рекомендую для начала почитать книгу Макса Шлее "Qt4. Профессиональное программирование на C++ ". |
|
|
IvanYuS |
2.8.2009, 18:10
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 27.7.2009 Пользователь №: 948 Спасибо сказали: 0 раз(а) Репутация: 0 |
Интересен еще такой вопрос, при создании формы в обработчеке клика на кнопке, кто будет родителем формы, кнопка или форма на которой находится кнопка? Родителем бутет тот, чей указатель будет передан в конструктор формы. У вас пробелы в базовых понятиях. Рекомендую для начала почитать книгу Макса Шлее "Qt4. Профессиональное программирование на C++ ". Ну я то в общем не программист, просто надо было кое-что запрогать, пока разбирался, втянулся -) Спасибо за ссылку на книгу -) |
|
|
Текстовая версия | Сейчас: 30.1.2025, 4:08 |