crossplatform.ru

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


  Ответ в Сигнал
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
silver47 Дата 18.4.2011, 8:57
 
Цитата(MJIbIu @ 18.4.2011, 10:50) *
а что тебе мешает сделать так ?
childClass = new ChildClass(this);
QObject::connect(this, SIGNAL(someParentSignal()), childClass, SLOT(someParentSlot));


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

UPD: все-же SLOT(someChildSlot())
MJIbIu Дата 18.4.2011, 8:50
 
Цитата(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, 7: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:


Правильно я думаю?
Litkevich Yuriy Дата 18.4.2011, 6:43
 
Цитата(Yaroslav @ 18.4.2011, 4:23) *
Чтобы передать сигнал из класса В в класс А проблем нет
а почему нет проблем?
silver47 Дата 18.4.2011, 4:53
 
Цитата(Yaroslav @ 18.4.2011, 3:23) *
Есть базовый класс А. .. стандартно он называется MainWindow ... есть какой класс В.. Чтобы передать сигнал из класса В в класс А проблем нет ... А как это сделать наоборот????


Передать указатель на базовый класс в дочерний? Или сделать еще проще. В базовом классе при возникновении сигнала отрабатывается некий слот, который вызывает публичную процедуру дочернего класса на выполнение.
Yaroslav Дата 18.4.2011, 1:23
  Есть базовый класс А. .. стандартно он называется MainWindow ... есть какой класс В.. Чтобы передать сигнал из класса В в класс А проблем нет ... А как это сделать наоборот????
Гость Дата 17.4.2011, 22:15
  Что? По нормальному объясните, что хотите.
Yaroslav Дата 17.4.2011, 20:02
  Как передать сигнал классам с MainWindow ..?

Спасибо!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 15:40