Название: Получить указатель на главное окно Отправлено: softminister от Апрель 28, 2021, 09:01 Qt только осваиваю, поэтому возникают такие вопросы.
Есть приложение на основе QDialog. Главное окно создает дочернее окно на основе QDialog. Как из дочернего окна получить доступ к public-методам главного окна? На просторах сети нашел метод получения указателя на главное окно: MainDialog *nw = qobject_cast<MainDialog*>( QApplication::topLevelWidgets()[ 0 ] ); Но видимо этот способ недостаточно безопасный, т.к. в половине случаев программа вылетает без объяснения каких-либо причин из-за этого, потому что оказывается nw=0. Видимо вылетает исключение. Поэтому такой способ не подходит. Кстати, почему вылетает? Объясните, как правильно поступить в такой простейшей ситуации? Как обращаться к функциям главного окна из дочерних окон? Название: Re: Получить указатель на главное окно Отправлено: juvf от Апрель 28, 2021, 10:39 Цитировать Как обращаться к функциям главного окна из дочерних окон? Ни как. ИМХО. Нефиг детям соваться в родительскую спальню. Запускайте из дочерних окон сигнал, в родительских обрабатывайте слотами. Название: Re: Получить указатель на главное окно Отправлено: RedDog от Апрель 28, 2021, 10:49 чтобы не вылетало, надо:
1. Проверить условие QApplication::topLevelWidgets().size() > 0 2. Проверить условие nullptr != nw Если оба условия прошли, можно дальше работать. Название: Re: Получить указатель на главное окно Отправлено: Igors от Апрель 28, 2021, 11:02 Кстати, почему вылетает? Потому что topLevelWidget может быть любым. а не только MainDialogОбъясните, как правильно поступить в такой простейшей ситуации? Как обращаться к функциям главного окна из дочерних окон? Как уже сказали, лезть их дочернего в главное неграмотно, т.е. Вы спрашиваете "как правильно сделать неправильно" :) Если же все-таки "ну вот надо", то можно напр такКод Или через qApp->toLevelWidgets. Или через глобальную переменную (QPointer). Но лучше всего никак не лезть :) Название: Re: Получить указатель на главное окно Отправлено: juvf от Апрель 28, 2021, 11:12 Если же все-таки "ну вот надо", то можно напр так при Название: Re: Получить указатель на главное окно Отправлено: Igors от Апрель 28, 2021, 11:28 при Не горячитесь. Зачем дочке еще член если он и так есть (парент)? И если это не дочка а внучка? :)Название: Re: Получить указатель на главное окно Отправлено: juvf от Апрель 28, 2021, 11:38 Зачем дочке еще член если он и так есть (парент)? И если это не дочка а внучка? :) Вы сами ответили на свой вопрос. Затем, что парентом может быть далеко не главное окно. Хоть внучка, хоть правнучка.... до 100 степени Название: Re: Получить указатель на главное окно Отправлено: Igors от Апрель 28, 2021, 12:35 Затем, что ... Не горячитесь :) Не надо бросаться доказывать что Вы (и только Вы) правы. Вы и так это знаете, Ваша правота от Вас никуда не убежит. Гораздо полезнее посмотреть какие еще есть решения.Название: Re: Получить указатель на главное окно Отправлено: juvf от Апрель 28, 2021, 12:47 Затем, что ... Не горячитесь :) Не надо бросаться доказывать что Вы (и только Вы) правы. Вы и так это знаете, Ваша правота от Вас никуда не убежит. Гораздо полезнее посмотреть какие еще есть решения. |