powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / connect(): слоты и сигналы
25 сообщений из 130, страница 1 из 6
connect(): слоты и сигналы
    #39997725
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На примере Qt, но его тут знать не обязательно. Вот сигнатура, упрощённо:

Код: plaintext
1.
void QObject::connect(const QObject *sender, const char *signal, const char *method) const;


Не обращайте внимание, что сигналы и слоты типа "const char *" это устаревшее, но не суть.

Мы наследуемся от QObject, вызываем этот метод. Далее объект "sender" генерирует сигнал "signal" и для "this" вызывается "method".

Обратите внимание, что в вызов connect() не передаётся this. Откуда ж он его знает? :) Я думаю, что там где-то кодогенерация с виртуальными функциями. Ну или макрос Q_OBJECT определяет виртуальную функцию, которая возвращает this.

Вроде по другому задачу не решить? Я так просто порассуждать.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997730
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Обратите внимание, что в вызов connect() не передаётся this. Откуда ж он его знает? :)

Как это не передается. Это же не статический метод, значит this у него есть.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997733
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитай основы ОО в С++: каждый нестатический метод класса имеет скрытый параметр. И это
- тадам! - this.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997745
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
petrav
Обратите внимание, что в вызов connect() не передаётся this. Откуда ж он его знает? :)

Как это не передается. Это же не статический метод, значит this у него есть.

Да, только в connect() this будет указывать на QObject, а метод-слот нужно будет вызвать в наследнике. И наследников может быть несколько: QObject -> A -> B. Множественное наследование тоже не запрещено.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997748
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, а исходники Qt почитать и, заодно, посмотреть что именно moc генерит что мешает? Пройтись дебаггером, в конце концов? )) там муторно конечно, но разобраться можно
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997749
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

Метод который вызывается виртуальный. Дальше все автоматически происходит.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997752
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Anatoly Moskovsky
пропущено...

Как это не передается. Это же не статический метод, значит this у него есть.

Да, только в connect() this будет указывать на QObject
С чего это??? this показывает на конкретный объект а не на класс. А уж сколько там уровней наследования никакой роли не играет.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997753
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
petrav,

Метод который вызывается виртуальный. Дальше все автоматически происходит.

Метод-слот, который вызывается, не виртуальный. И в QObject его вообще нет ни в каком виде.

На то он и слот...
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997761
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

морочишь людям головы.
Код: plaintext
1.
2.
template <typename PointerToMemberFunction, typename Functor>
QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)

если в функции три параметра то третий это функтор и туда будут приходить сигналы. но никак не в объект в котором ты вызываешь connect
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997763
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc
petrav,

морочишь людям головы.
Код: plaintext
1.
2.
template <typename PointerToMemberFunction, typename Functor>
QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)

если в функции три параметра то третий это функтор и туда будут приходить сигналы. но никак не в объект в котором ты вызываешь connect

Это новшество Qt 5. Если вы посмотрите на сигнатуру в первом посте, то поймёте, что вопрос был про функцию connect() из Qt 4.

PS: Да, я не пользуюсь этой устаревшей функцией, всё только compile time, без char * хранящий инфу о слоте.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997768
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
OoCc
petrav,

морочишь людям головы.
Код: plaintext
1.
2.
template <typename PointerToMemberFunction, typename Functor>
QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)

если в функции три параметра то третий это функтор и туда будут приходить сигналы. но никак не в объект в котором ты вызываешь connect

Это новшество Qt 5. Если вы посмотрите на сигнатуру в первом посте, то поймёте, что вопрос был про функцию connect() из Qt 4.

PS: Да, я не пользуюсь этой устаревшей функцией, всё только compile time, без char * хранящий инфу о слоте.

В таком случае Qt генерирует что то. Метод же обьявляется как слот.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39997988
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а какие у нас вообще есть честные C++ способы передать this наследника в
базовый класс (кроме виртуальных функций)?

- Через "странно рекурсивное наследование" передать в базовый класс тип (класс)
наследника. И в базовом классе преобразовать this базового класса.

- Паттерн Command. Самая простая реализация std::function + std::bind.

- Передать в базовый класс функтор (лямбду) в котором упакованы this (ну и метод).

Перечисленное во многом пересекается, в терминологии могу ошибаться.

Что-то забыл?
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998034
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Опять же нужен практический код и вопрос.
В общем случае базовый класс не должен знать о наследнике.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998051
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Кстати, а какие у нас вообще есть честные C++ способы передать this наследника в
базовый класс (кроме виртуальных функций)?...


ОО метода это от жизни...
И посему интересн пример из жизни, где яйца должны знать форму лотка в котором они лежат. Это типо уши у них что ли появились или ручки для ощупывания?

выходит как то так...
(круглый)
ЗЫ
Для наследования - можно сказать по другому:
- сущность зверь знает кем она может быть в будущем? Типо через год буду зайцем... ????
ЗЫ ЗЫ
По поводу слотов в QT - там были глюки лет пять назад. Надо очень аккуратно коннект и дисконнект делать.
- сохранять форму вызова
- делать дисконнект в обратной последовательности
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998132
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0
По поводу слотов в QT - там были глюки лет пять назад. Надо очень аккуратно коннект и дисконнект делать.
Не подскажите, где бы посмотреть про это (мне может оказаться актуальным)?
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998137
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0
petrav
Кстати, а какие у нас вообще есть честные C++ способы передать this наследника в
базовый класс (кроме виртуальных функций)?...


ОО метода это от жизни...
И посему интересн пример из жизни, где яйца должны знать форму лотка в котором они лежат. Это типо уши у них что ли появились или ручки для ощупывания?

Иначе GUI в ООП стиле не построишь.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998156
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
.Иначе GUI в ООП стиле не построишь.




вот это поворот...
ну... тут надобно пример траблов, которые вызвали трудности...а так - не о чём...
накидайте пример. может я что то новое для себя узнаю...

(круглый)
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998176
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Иначе GUI в ООП стиле не построишь.
бездоказательно дорогой).
ООП это наследование, полиморфизм и инкапсуляция. Где трудности?
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998177
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010,
Вангую что утечка памяти. Но могу ошибаться.
Ну а прогеры старой закалки просто аккуратно подписываются и аккуратно отписываются на события.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998215
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0
petrav
.Иначе GUI в ООП стиле не построишь.




вот это поворот...
ну... тут надобно пример траблов, которые вызвали трудности...а так - не о чём...
накидайте пример. может я что то новое для себя узнаю...

Я думаю, что как-то так 22195969 и работает connect() из Qt 5.
Макрос "slots" уже не нужен.

Представьте, что мы разработчики Qt. Нам нужно без кодогенерации вызвать из
базовой библиотеки метод клиентского класса. При этом этот метод не виртуальный,
и не статический, имеет заведомо неизвестное название.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998238
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, а сколько потоков в твоём приложении?
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998244
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav, а сколько потоков в твоём приложении?

А к чему вопрос?
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998246
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я могу ошибаться но в моём понимании сигнально-слотная система полезна когда у тебя несколько
потоков коммуницируют друг с другом. Как акторы. Или как подписчики и поставщики в системах MQ.

В остальных случаях. Зачем? Ну вызови метод и все.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998248
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В остальных случаях. Зачем? Ну вызови метод и все.

Представим у нас есть два библиотечных класса BaseForm и PushButton.

Как вы предлагаете из них вызывать метод MyForm::onMyButtonPressed() ?

MyForm -- клиентский класс, наследник от BaseForm.
...
Рейтинг: 0 / 0
connect(): слоты и сигналы
    #39998249
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так глубоко не вижу проблему. А в чем проблема вызвать метод?
...
Рейтинг: 0 / 0
25 сообщений из 130, страница 1 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / connect(): слоты и сигналы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]