Название: Обработка сигнала из динамически подключаемого виджета слотом в главном окне Отправлено: edd_k от Март 01, 2012, 23:08 Всем доброго здравия!
Допустим есть такое приложение: (http://clip2net.com/clip/m76758/1330631972-clip-12kb.png) И допустим, что действие для кнопки 2 находится в компетенции самого виджета, но вот действие для кнопки 1 - глобальное, т.е. находится в компетенции главной формы (что-нибудь типа открытия файла). В классе главной формы имеем паблик слот process_something(). 1. При проектировании формы виджета мы вообше не видим главную форму, т.е. не имеем возможности обратиться к ее слотам. Т.е. в дизайнере форм получается вообще не судьба? 2. В коде виджета мы конечно же имеем доступ к главной форме через свойство parent. Получается, вижу пока что только пару вариантов: - в коде виджета инклудить MainWindow.h, преобразовывать parent к MainWindow и вызывать его слот; - создать глобально "хранилище" глобальных экшинов и инклудить это хранилище в главной форме и во всех виджетах. Какие еще есть способы (более элегантные, простые или правильные) для взаимодействия дочернего окна/виджета с родительским? ВОзможно ли сделать привязку к сигнагу дочечернего виджета слота родительского окна прямо в дизайнере? Название: Re: Обработка сигнала из динамически подключаемого виджета слотом в главном окне Отправлено: LisandreL от Март 01, 2012, 23:17 У виджета1 завести сигнал, связать его с сигналом «глобальной» кнопки. (connect может связывать не только сигнал со слотом но и сигнал с сигналом)
Сигнал виджета уже связать с нужным слотом главной формы. Ещё можно у виджета ui переместить в public и добираться до элементов виджета уже в главной форме (не забыв сделать #include "ui_xxxxxx.h"), но на мой взгляд первый вариант правильнее. Название: Re: Обработка сигнала из динамически подключаемого виджета слотом в главном окне Отправлено: edd_k от Март 02, 2012, 00:45 Спасибо за быстрый ответ!
Еще не заметил, что parent - это всего-лишь QObject, а вот parentWidget - QWidget. То-то думаю, что так мало свойств у парента )) Название: Re: Обработка сигнала из динамически подключаемого виджета слотом в главном окне Отправлено: LisandreL от Март 02, 2012, 06:27 Еще не заметил, что parent - это всего-лишь QObject, а вот parentWidget - QWidget. То-то думаю, что так мало свойств у парента Ну указатель это один и тот же, просто приведённый к разным типам.Название: Re: Обработка сигнала из динамически подключаемого виджета слотом в главном окне Отправлено: vunder от Март 02, 2012, 12:08 Можно создать интерфейс, от которого будут наследоваться виджеты. В этом интерфейсе объявить сигнал. В главной форме, после создания нового виджета, связывает сигнал-слот.
Название: Re: Обработка сигнала из динамически подключаемого виджета слотом в главном окне Отправлено: LisandreL от Март 02, 2012, 16:19 В этом интерфейсе объявить сигнал. Сигнал может быть только у наследника QObject, а дальше с множественным наследованием у вас всё получится плохо и грустно, так как в QWidget'е оно уже не виртуальное. |