|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
На примере Qt, но его тут знать не обязательно. Вот сигнатура, упрощённо: Код: plaintext 1.
Не обращайте внимание, что сигналы и слоты типа "const char *" это устаревшее, но не суть. Мы наследуемся от QObject, вызываем этот метод. Далее объект "sender" генерирует сигнал "signal" и для "this" вызывается "method". Обратите внимание, что в вызов connect() не передаётся this. Откуда ж он его знает? :) Я думаю, что там где-то кодогенерация с виртуальными функциями. Ну или макрос Q_OBJECT определяет виртуальную функцию, которая возвращает this. Вроде по другому задачу не решить? Я так просто порассуждать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:25 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav Обратите внимание, что в вызов connect() не передаётся this. Откуда ж он его знает? :) Как это не передается. Это же не статический метод, значит this у него есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:38 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
Прочитай основы ОО в С++: каждый нестатический метод класса имеет скрытый параметр. И это - тадам! - this. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:41 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky petrav Обратите внимание, что в вызов connect() не передаётся this. Откуда ж он его знает? :) Как это не передается. Это же не статический метод, значит this у него есть. Да, только в connect() this будет указывать на QObject, а метод-слот нужно будет вызвать в наследнике. И наследников может быть несколько: QObject -> A -> B. Множественное наследование тоже не запрещено. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:04 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav, а исходники Qt почитать и, заодно, посмотреть что именно moc генерит что мешает? Пройтись дебаггером, в конце концов? )) там муторно конечно, но разобраться можно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:09 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav, Метод который вызывается виртуальный. Дальше все автоматически происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:10 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav Anatoly Moskovsky пропущено... Как это не передается. Это же не статический метод, значит this у него есть. Да, только в connect() this будет указывать на QObject ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:12 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky petrav, Метод который вызывается виртуальный. Дальше все автоматически происходит. Метод-слот, который вызывается, не виртуальный. И в QObject его вообще нет ни в каком виде. На то он и слот... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:13 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav, морочишь людям головы. Код: plaintext 1. 2.
если в функции три параметра то третий это функтор и туда будут приходить сигналы. но никак не в объект в котором ты вызываешь connect ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:29 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
OoCc petrav, морочишь людям головы. Код: plaintext 1. 2.
если в функции три параметра то третий это функтор и туда будут приходить сигналы. но никак не в объект в котором ты вызываешь connect Это новшество Qt 5. Если вы посмотрите на сигнатуру в первом посте, то поймёте, что вопрос был про функцию connect() из Qt 4. PS: Да, я не пользуюсь этой устаревшей функцией, всё только compile time, без char * хранящий инфу о слоте. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:33 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav OoCc petrav, морочишь людям головы. Код: plaintext 1. 2.
если в функции три параметра то третий это функтор и туда будут приходить сигналы. но никак не в объект в котором ты вызываешь connect Это новшество Qt 5. Если вы посмотрите на сигнатуру в первом посте, то поймёте, что вопрос был про функцию connect() из Qt 4. PS: Да, я не пользуюсь этой устаревшей функцией, всё только compile time, без char * хранящий инфу о слоте. В таком случае Qt генерирует что то. Метод же обьявляется как слот. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:45 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
Кстати, а какие у нас вообще есть честные C++ способы передать this наследника в базовый класс (кроме виртуальных функций)? - Через "странно рекурсивное наследование" передать в базовый класс тип (класс) наследника. И в базовом классе преобразовать this базового класса. - Паттерн Command. Самая простая реализация std::function + std::bind. - Передать в базовый класс функтор (лямбду) в котором упакованы this (ну и метод). Перечисленное во многом пересекается, в терминологии могу ошибаться. Что-то забыл? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 21:24 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav, Опять же нужен практический код и вопрос. В общем случае базовый класс не должен знать о наследнике. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2020, 10:00 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav Кстати, а какие у нас вообще есть честные C++ способы передать this наследника в базовый класс (кроме виртуальных функций)?... ОО метода это от жизни... И посему интересн пример из жизни, где яйца должны знать форму лотка в котором они лежат. Это типо уши у них что ли появились или ручки для ощупывания? выходит как то так... (круглый) ЗЫ Для наследования - можно сказать по другому: - сущность зверь знает кем она может быть в будущем? Типо через год буду зайцем... ???? ЗЫ ЗЫ По поводу слотов в QT - там были глюки лет пять назад. Надо очень аккуратно коннект и дисконнект делать. - сохранять форму вызова - делать дисконнект в обратной последовательности ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2020, 13:06 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
kolobok0 По поводу слотов в QT - там были глюки лет пять назад. Надо очень аккуратно коннект и дисконнект делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2020, 21:01 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
kolobok0 petrav Кстати, а какие у нас вообще есть честные C++ способы передать this наследника в базовый класс (кроме виртуальных функций)?... ОО метода это от жизни... И посему интересн пример из жизни, где яйца должны знать форму лотка в котором они лежат. Это типо уши у них что ли появились или ручки для ощупывания? Иначе GUI в ООП стиле не построишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2020, 21:16 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav .Иначе GUI в ООП стиле не построишь. вот это поворот... ну... тут надобно пример траблов, которые вызвали трудности...а так - не о чём... накидайте пример. может я что то новое для себя узнаю... (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2020, 23:16 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav Иначе GUI в ООП стиле не построишь. ООП это наследование, полиморфизм и инкапсуляция. Где трудности? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 05:56 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
bk0010, Вангую что утечка памяти. Но могу ошибаться. Ну а прогеры старой закалки просто аккуратно подписываются и аккуратно отписываются на события. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 05:58 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
kolobok0 petrav .Иначе GUI в ООП стиле не построишь. вот это поворот... ну... тут надобно пример траблов, которые вызвали трудности...а так - не о чём... накидайте пример. может я что то новое для себя узнаю... Я думаю, что как-то так 22195969 и работает connect() из Qt 5. Макрос "slots" уже не нужен. Представьте, что мы разработчики Qt. Нам нужно без кодогенерации вызвать из базовой библиотеки метод клиентского класса. При этом этот метод не виртуальный, и не статический, имеет заведомо неизвестное название. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 10:23 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
petrav, а сколько потоков в твоём приложении? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 11:26 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
mayton petrav, а сколько потоков в твоём приложении? А к чему вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 11:35 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
Я могу ошибаться но в моём понимании сигнально-слотная система полезна когда у тебя несколько потоков коммуницируют друг с другом. Как акторы. Или как подписчики и поставщики в системах MQ. В остальных случаях. Зачем? Ну вызови метод и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 11:39 |
|
connect(): слоты и сигналы
|
|||
---|---|---|---|
#18+
mayton В остальных случаях. Зачем? Ну вызови метод и все. Представим у нас есть два библиотечных класса BaseForm и PushButton. Как вы предлагаете из них вызывать метод MyForm::onMyButtonPressed() ? MyForm -- клиентский класс, наследник от BaseForm. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 11:46 |
|
|
start [/forum/topic.php?fid=57&fpage=6&tid=2017330]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 159ms |
0 / 0 |