crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Получить указатель на главное окно
softminister
  опции профиля:
сообщение 28.4.2021, 9:02
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 28.4.2021
Пользователь №: 5261

Спасибо сказали: 0 раз(а)




Репутация:   0  


Qt только осваиваю, поэтому возникают такие вопросы.

Есть приложение на основе QDialog. Главное окно создает дочернее окно на основе QDialog.

Как из дочернего окна получить доступ к public-методам главного окна?

На просторах сети нашел метод получения указателя на главное окно:

MainDialog *nw = qobject_cast<MainDialog*>( QApplication::topLevelWidgets()[ 0 ] );


Но видимо этот способ недостаточно безопасный, т.к. в половине случаев программа вылетает без объяснения каких-либо причин из-за этого, потому что оказывается nw=0. Видимо вылетает исключение. Поэтому такой способ не подходит. Кстати, почему вылетает?

Объясните, как правильно поступить в такой простейшей ситуации? Как обращаться к функциям главного окна из дочерних окон?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.4.2021, 15:40
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(softminister @ 28.4.2021, 11:02) *
Как обращаться к функциям главного окна из дочерних окон

передай указатель на главное окно в диалог через его (диалога) конструктор




Цитата(softminister @ 28.4.2021, 11:02) *
вылетает без объяснения каких-либо причин из-за этого, потому что оказывается nw=0.

а проверить на nullptr нельзя что ли ? )) Кроме того, где проверка того, что QApplication::topLevelWidgets() вернул не пустой список ?

Цитата(softminister @ 28.4.2021, 11:02) *
Кстати, почему вылетает?

разыменование нулевого указателя потому что

Сообщение отредактировал Алексей1153 - 28.4.2021, 15:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.8.2021, 7:05
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(softminister @ 28.4.2021, 11:02) *
Как обращаться к функциям главного окна из дочерних окон?
В общем случае это плохая идея, работающая задом на перёд.
При необходимости двусторонней связи окон с такой иерархией, стоит сделать сигналы и слоты у обоих окон, в главном окне (после создания дочернего) связать их сигналы и слоты, затем отобразить дочернее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 19:00