crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Сигнал
Yaroslav
  опции профиля:
сообщение 17.4.2011, 20:02
Сообщение #1


Новичок


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

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




Репутация:   0  


Как передать сигнал классам с MainWindow ..?

Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 17.4.2011, 22:15
Сообщение #2





Гости








    


Что? По нормальному объясните, что хотите.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Yaroslav
  опции профиля:
сообщение 18.4.2011, 1:23
Сообщение #3


Новичок


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

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




Репутация:   0  


Есть базовый класс А. .. стандартно он называется MainWindow ... есть какой класс В.. Чтобы передать сигнал из класса В в класс А проблем нет ... А как это сделать наоборот????
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 18.4.2011, 4:53
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


Цитата(Yaroslav @ 18.4.2011, 3:23) *
Есть базовый класс А. .. стандартно он называется MainWindow ... есть какой класс В.. Чтобы передать сигнал из класса В в класс А проблем нет ... А как это сделать наоборот????


Передать указатель на базовый класс в дочерний? Или сделать еще проще. В базовом классе при возникновении сигнала отрабатывается некий слот, который вызывает публичную процедуру дочернего класса на выполнение.

Сообщение отредактировал silver47 - 18.4.2011, 4:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.4.2011, 6:43
Сообщение #5


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

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

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




Репутация:   94  


Цитата(Yaroslav @ 18.4.2011, 4:23) *
Чтобы передать сигнал из класса В в класс А проблем нет
а почему нет проблем?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 18.4.2011, 7:36
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


Цитата(Litkevich Yuriy @ 18.4.2011, 8:43) *
а почему нет проблем?


Совсем запутался. Дочерний класс будет испускать любые сигналы, и базовый класс вполне легко их будет видеть. Чтобы дочерний класс увидел сигналы базового класса, как мне кажется, нужно или указатель на родительский класс тащить в дочерний, или, тупо, вызывать какой-либо публичный метод в дочернем классе.

Как-то так:
// Базовый класс А
childClass = new ChildClass(this);
QObject::connect(childClass, SIGNAL(childSignal()), this, SLOT(someParentSlot()));
// теперь при испускании дочерним классом сигнала childSignal, будет выполняться слот someParentSlot родителя

// чтобы выполнить какой то слот у дочернего класса из родительского достаточно сделать так:
childClass->someChildSlot();
// при условии что someChildSlot() объявлен в разделе public slots:


Правильно я думаю?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 18.4.2011, 8:50
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

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




Репутация:   0  


Цитата(silver47 @ 18.4.2011, 8:36) *
Цитата(Litkevich Yuriy @ 18.4.2011, 8:43) *
а почему нет проблем?


Совсем запутался. Дочерний класс будет испускать любые сигналы, и базовый класс вполне легко их будет видеть. Чтобы дочерний класс увидел сигналы базового класса, как мне кажется, нужно или указатель на родительский класс тащить в дочерний, или, тупо, вызывать какой-либо публичный метод в дочернем классе.

Как-то так:
// Базовый класс А
childClass = new ChildClass(this);
QObject::connect(childClass, SIGNAL(childSignal()), this, SLOT(someParentSlot()));
// теперь при испускании дочерним классом сигнала childSignal, будет выполняться слот someParentSlot родителя

// чтобы выполнить какой то слот у дочернего класса из родительского достаточно сделать так:
childClass->someChildSlot();
// при условии что someChildSlot() объявлен в разделе public slots:


Правильно я думаю?

а что тебе мешает сделать так ?
childClass = new ChildClass(this);

QObject::connect(this, SIGNAL(someParentSignal()), childClass, SLOT(someParentSlot));

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 18.4.2011, 8:57
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


Цитата(MJIbIu @ 18.4.2011, 10:50) *
а что тебе мешает сделать так ?
childClass = new ChildClass(this);
QObject::connect(this, SIGNAL(someParentSignal()), childClass, SLOT(someParentSlot));


Ну, видимо, ничего. Вот и нашлось более изящное решение.

UPD: все-же SLOT(someChildSlot())

Сообщение отредактировал silver47 - 18.4.2011, 8:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.9.2020, 20:07