![]() |
|
|
![]()
|
|
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Привет.
Хочу узнать какой сигнал (не объект-сендер, а именно сигнал) вызвал слот. Поясню: я коннекчу 2 сигнала одного объекта на один слот
в onReadyRead() мне нужно узнать какой из сигналов дёрнул слот, чтобы сделать некоторые действия - а именно вызвать setReadChannel() с QProcess::StandardError или с QProcess::StandardOutput, а затем уже читать с помошью readLine(). Ессно, это можно легко решить законнектив каждый сигнал на отдельный слот, в каждом из которых сделать свой setReadChannel() и вызов общей для обоих случаев ф-ции чтения.
Поэтому вопрос, скорее теоретический, чем жизненно необходимый. Спасибо. Это сообщение отредактировал(а) borisbn - 23.11.2011, 11:21 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
В отладчике это можно увидеть в
this->QObject->currentSender->signal (в виде индекса в таблице сигналов) Но открытого доступа к этому полю нет (по крайней мере, я не нашёл) |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
почему не передавать в сигнал параметр?
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
потому, что это сигнал стандартного класса QProcess -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
типа такого:
но тут надо имя метода... Это сообщение отредактировал(а) Modul - 23.11.2011, 15:20 --------------------
I'll be back ! |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
deleted, т.к. Modul уточнил
Это сообщение отредактировал(а) borisbn - 23.11.2011, 15:31 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
borisbn, параметр слота можно забить через QSignalMapper
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
alexvs11, спасибо, ушёл курить QSignalMapper
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
может это поможет:
как идентифицировать сигнал
не проверял, но интересно! --------------------
I'll be back ! |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Modul, проверил. работает на версии 4.6.2. только чуть-чуть нужно подправить
.data() нужен потому, что тролли переделали хранение private-данных на QScopedPointer<QObjectData>, который может быть преобразован к QObjectData* только, если какая-нибудь ф-ция требует на вход QObjectData*, а reinterpret_cast не требует какого-то определённого указателя на вход. В общем, этот способ меня в корне не устраивает, т.к. при смене версии Qt у меня программа в самом лучшем случае не скомпиляется, а в худшем - будет работать, и работать неправильно... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
по-простому можно конечно посмотреть код QSignalMapper - как он определяет кто послал сигнал |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
alexvs11,
для того, чтобы узнать сендера достаточно sender() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
borisbn, ну разным сигналам задаете разные параметры
делов то |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
alexvs11, покажите, как в Вашем коде с QSignalMapper это сделать подозреваю - никак -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Можно сделать и через QSignalMapper - но в данном случае Ваш второй вариант из первого поста проще - фактически, при использовании QSignalMapper нужно в нём сделать то, что Вы сделали непосредственно в классе CC.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
разве что через разные QSignalMapper'ы...
дико извиняюсь, что туплю, но... как ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Я имел в виду не использовать стандартный QSignalMapper, а написать собственный по его образу. Если нужно применять несколько раз, это оправдано.
Или использовать два стандартных QSignalMapper, как Вы предложили. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Не, пожалуй, сегодня не мой день. Всё равно не пойму как это сделать. Если как-то так
то это, действительно, не отличается от моего варианта №2, причём, при изменении количества сигналов или их сигнатуры, придётся менять этот "унивирсальный" MySignalMapper. В общем, повторюсь: проблема уже решена, и это был чисто теоретический вопрос... Закрываю. Это сообщение отредактировал(а) borisbn - 25.11.2011, 13:17 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |