crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> возвращаемые значения у сигналов
borune
  опции профиля:
сообщение 14.10.2013, 18:07
Сообщение #1


Участник
**

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

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




Репутация:   0  


Ребят, а скажите пожалуйста, как можно использовать значения, возвращаемые сигналами?

Обычно сигналы объявляются с типом void, а если сделать другой тип, что будет? зачем это нужно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 14.10.2013, 18:19
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


А никак. Т.к. к сигналу может быть подключено несколько слотов, и порядок их вызова тебе не известен, то ты не можешь полагаться на возвращаемое значение. Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 14.10.2013, 19:14
Сообщение #3


Участник
**

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

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




Репутация:   0  


Цитата(Sokoloff @ 14.10.2013, 19:19) *
А никак. Т.к. к сигналу может быть подключено несколько слотов, и порядок их вызова тебе не известен, то ты не можешь полагаться на возвращаемое значение. Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель.

погоди..а причем тут порядок вызова-то..вот есть сигнал..у него есть тип..вот зачем этот тип нужен, он же не может быть просто так, чтоб было..как-то же он должен использоваться, не? как вернуть значение из сигнала, где это делать..и главное, где это используется, если используется вообще..вот что меня интересует)

Сообщение отредактировал borune - 14.10.2013, 19:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 15.10.2013, 6:35
Сообщение #4


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

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

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




Репутация:   3  


Цитата
вот есть сигнал..у него есть тип..вот зачем этот тип нужен, он же не может быть просто так, чтоб было..как-то же он должен использоваться, не?

Не нужен. Не используется. Сигналы не вызываются, а испускаются. Sokoloff говорил о том что на сигнал могут быть "подписаны" разные слоты c разными типами возращаемых значений. Не стоит забывать что сигналы это не механизм языка, а фишка Qt.
Да и логика использования сигналов такова что возвращаемое значение не используется, ведь сигнал даже не знает к какому слоту он подсоединен. И соединен ли вообще. Сигнал это средство информирования "внешнего мира" о неком событии. Это совсем не функция.

Сообщение отредактировал ilyabvt - 15.10.2013, 6:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 15.10.2013, 6:37
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


можно передать ссылку на объект и по ссылке скопировать в этот объект данные. "Возвращать" указатель не рекомендую, напорешься на фокусы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 15.10.2013, 8:05
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


Цитата(ilyabvt @ 15.10.2013, 9:35) *
сигналы это не механизм языка, а фишка Qt

ну, вообще-то сигналы - общая системная фича. но в разных библиотеках они тоже используются и реализованы по-разному. в Qt это таблицы и автоматически генерируемые функции, не связанные с системными вызовами.

а так, для сигналов и слотов с возвращаемым значением и управлением этими значениями существует boost::signals2. довольно хитрая штука, правда, я так и не нашла ей применения на практике.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.10.2013, 2:22
Сообщение #7


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

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

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




Репутация:   94  


Цитата(borune @ 14.10.2013, 21:14) *
погоди..а причем тут порядок вызова-то..вот есть сигнал..у него есть тип..вот зачем этот тип нужен
у любой Си/Си++ функции есть возвращаемое значение. Это особенность языка.
Просто в Qt ты сам не занимаешься реализацией этой функции, за тебя это делает moc - матаобъектный компилятор.

Псевдо-код будет таким:
// положим есть сигнал
SIGNALS
void someSignal(int);
...
// и слоты
SLOTS
void firstSlot(int);
void secondSlot(int);

// и далее соединения
connect(this, SIGNAL(someSignal(int)), this, SLOT(firstSlot(int)));
connect(this, SIGNAL(someSignal(int)), this, SLOT(secondSlot(int)));
то благодаря moc-у получится такой код:
void someSignal(int arg)
{
    firstSlot(arg);
    secondSlot(arg);
}


Ну а выше тебе правильно сказали, опасно использовать не void-ное возвращаемое значение


Цитата(Sokoloff @ 14.10.2013, 20:19) *
Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель.
+1
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 1.12.2024, 15:25