возвращаемые значения у сигналов |
Здравствуйте, гость ( Вход | Регистрация )
возвращаемые значения у сигналов |
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 |
А никак. Т.к. к сигналу может быть подключено несколько слотов, и порядок их вызова тебе не известен, то ты не можешь полагаться на возвращаемое значение. Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель. погоди..а причем тут порядок вызова-то..вот есть сигнал..у него есть тип..вот зачем этот тип нужен, он же не может быть просто так, чтоб было..как-то же он должен использоваться, не? как вернуть значение из сигнала, где это делать..и главное, где это используется, если используется вообще..вот что меня интересует) Сообщение отредактировал 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 |
сигналы это не механизм языка, а фишка Qt ну, вообще-то сигналы - общая системная фича. но в разных библиотеках они тоже используются и реализованы по-разному. в Qt это таблицы и автоматически генерируемые функции, не связанные с системными вызовами. а так, для сигналов и слотов с возвращаемым значением и управлением этими значениями существует boost::signals2. довольно хитрая штука, правда, я так и не нашла ей применения на практике. |
|
|
Litkevich Yuriy |
16.10.2013, 2:22
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
погоди..а причем тут порядок вызова-то..вот есть сигнал..у него есть тип..вот зачем этот тип нужен у любой Си/Си++ функции есть возвращаемое значение. Это особенность языка.Просто в Qt ты сам не занимаешься реализацией этой функции, за тебя это делает moc - матаобъектный компилятор. Псевдо-код будет таким: то благодаря moc-у получится такой код:
Ну а выше тебе правильно сказали, опасно использовать не void-ное возвращаемое значение Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель. +1 |
|
|
Текстовая версия | Сейчас: 29.11.2024, 2:30 |