Russian Qt Forum
Сентябрь 30, 2024, 10:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка сигнала из динамически подключаемого виджета слотом в главном окне  (Прочитано 3224 раз)
edd_k
Гость
« : Март 01, 2012, 23:08 »

Всем доброго здравия!

Допустим есть такое приложение:



И допустим, что действие для кнопки 2 находится в компетенции самого виджета, но вот действие для кнопки 1 - глобальное, т.е. находится в компетенции главной формы (что-нибудь типа открытия файла). В классе главной формы имеем паблик слот process_something().

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

2. В коде виджета мы конечно же имеем доступ к главной форме через свойство parent. Получается, вижу пока что только пару вариантов:
- в коде виджета инклудить MainWindow.h, преобразовывать parent к MainWindow и вызывать его слот;
- создать глобально "хранилище" глобальных экшинов и инклудить это хранилище в главной форме и во всех виджетах.

Какие еще есть способы (более элегантные, простые или правильные) для взаимодействия дочернего окна/виджета с родительским? ВОзможно ли сделать привязку к сигнагу дочечернего виджета слота родительского окна прямо в дизайнере?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Март 01, 2012, 23:17 »

У виджета1 завести сигнал, связать его с сигналом «глобальной» кнопки. (connect может связывать не только сигнал со слотом но и сигнал с сигналом)
Сигнал виджета уже связать с нужным слотом главной формы.

Ещё можно у виджета ui переместить в public и добираться до элементов виджета уже в главной форме (не забыв сделать #include "ui_xxxxxx.h"), но на мой взгляд первый вариант правильнее.
Записан
edd_k
Гость
« Ответ #2 : Март 02, 2012, 00:45 »

Спасибо за быстрый ответ!

Еще не заметил, что parent - это всего-лишь QObject, а вот parentWidget - QWidget. То-то думаю, что так мало свойств у парента ))
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Март 02, 2012, 06:27 »

Еще не заметил, что parent - это всего-лишь QObject, а вот parentWidget - QWidget. То-то думаю, что так мало свойств у парента
Ну указатель это один и тот же, просто приведённый к разным типам.
Записан
vunder
Гость
« Ответ #4 : Март 02, 2012, 12:08 »

Можно  создать интерфейс, от которого будут наследоваться виджеты. В этом интерфейсе объявить сигнал. В главной форме, после создания нового виджета, связывает сигнал-слот.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Март 02, 2012, 16:19 »

В этом интерфейсе объявить сигнал.
Сигнал может быть только у наследника QObject, а дальше с множественным наследованием у вас всё получится плохо и грустно, так как в QWidget'е оно уже не виртуальное.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.