![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
borune |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ребят, а скажите пожалуйста, как можно использовать значения, возвращаемые сигналами?
Обычно сигналы объявляются с типом void, а если сделать другой тип, что будет? зачем это нужно? |
|
|
Sokoloff |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: ![]() ![]() ![]() |
А никак. Т.к. к сигналу может быть подключено несколько слотов, и порядок их вызова тебе не известен, то ты не можешь полагаться на возвращаемое значение. Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель.
|
|
|
borune |
![]()
Сообщение
#3
|
Участник ![]() ![]() Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А никак. Т.к. к сигналу может быть подключено несколько слотов, и порядок их вызова тебе не известен, то ты не можешь полагаться на возвращаемое значение. Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель. погоди..а причем тут порядок вызова-то..вот есть сигнал..у него есть тип..вот зачем этот тип нужен, он же не может быть просто так, чтоб было..как-то же он должен использоваться, не? как вернуть значение из сигнала, где это делать..и главное, где это используется, если используется вообще..вот что меня интересует) Сообщение отредактировал borune - 14.10.2013, 19:17 |
|
|
ilyabvt |
![]()
Сообщение
#4
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: ![]() ![]() ![]() |
Цитата вот есть сигнал..у него есть тип..вот зачем этот тип нужен, он же не может быть просто так, чтоб было..как-то же он должен использоваться, не? Не нужен. Не используется. Сигналы не вызываются, а испускаются. Sokoloff говорил о том что на сигнал могут быть "подписаны" разные слоты c разными типами возращаемых значений. Не стоит забывать что сигналы это не механизм языка, а фишка Qt. Да и логика использования сигналов такова что возвращаемое значение не используется, ведь сигнал даже не знает к какому слоту он подсоединен. И соединен ли вообще. Сигнал это средство информирования "внешнего мира" о неком событии. Это совсем не функция. Сообщение отредактировал ilyabvt - 15.10.2013, 6:42 |
|
|
Алексей1153 |
![]()
Сообщение
#5
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
можно передать ссылку на объект и по ссылке скопировать в этот объект данные. "Возвращать" указатель не рекомендую, напорешься на фокусы
|
|
|
Iron Bug |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
сигналы это не механизм языка, а фишка Qt ну, вообще-то сигналы - общая системная фича. но в разных библиотеках они тоже используются и реализованы по-разному. в Qt это таблицы и автоматически генерируемые функции, не связанные с системными вызовами. а так, для сигналов и слотов с возвращаемым значением и управлением этими значениями существует boost::signals2. довольно хитрая штука, правда, я так и не нашла ей применения на практике. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
погоди..а причем тут порядок вызова-то..вот есть сигнал..у него есть тип..вот зачем этот тип нужен у любой Си/Си++ функции есть возвращаемое значение. Это особенность языка.Просто в Qt ты сам не занимаешься реализацией этой функции, за тебя это делает moc - матаобъектный компилятор. Псевдо-код будет таким: то благодаря moc-у получится такой код:
Ну а выше тебе правильно сказали, опасно использовать не void-ное возвращаемое значение Если тебе нужно возвращать что-то из слотов используй аргумент ссылку или указатель. +1 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.2.2025, 3:23 |