Russian Qt Forum
Ноябрь 22, 2024, 22:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt4 маппинг сигналов  (Прочитано 3704 раз)
Fat-Zer
Гость
« : Февраль 28, 2016, 15:45 »

Что-то туплю и не могу найти в документации: как замапить два разных сигнала с одного объекта на один слот с разными параметрами другого
Код:
connect(dlg, SIGNAL(accepted()), &eventLoop, SLOT (quit(0)) ); //< передать в quit нуль
connect(dlg, SIGNAL(rejected()), &eventLoop, SLOT (quit(1)) ); //< передать в quit единицу
Записан
VPS
Гость
« Ответ #1 : Февраль 28, 2016, 16:39 »

У класса "QEventLoop" нет слота "quit(int)" - только "quit()".
А если бы был, то можно было бы воспользоваться сигналом "void QDialog::finished(int result)", который подключить к соответствующему слоту.
Записан
Bepec
Гость
« Ответ #2 : Февраль 28, 2016, 16:40 »

Новый стандарт позволяет сразу на месте определить что и куда испускать. А не используя новый - только разруливать самому в слоте.
Записан
Fat-Zer
Гость
« Ответ #3 : Февраль 28, 2016, 19:30 »

У класса "QEventLoop" нет слота "quit(int)" - только "quit()".
эх, проглядел... увидел exit() и обрадовался, а дальше не промотал... спасибо...

А если бы был, то можно было бы воспользоваться сигналом "void QDialog::finished(int result)", который подключить к соответствующему слоту.
собственно там не QDialog, но сигналы всё равно вводить... почему-то я сам не догадался int кинуть... спасибо...

Новый стандарт позволяет сразу на месте определить что и куда испускать.
Qt4... тут без компромиссов...  но в силу ряда причин, вероятно, сделаю сигналы бустовскими (всё равно везде используется)... очень уж не комильфо будет в отдельном слоте всё делать... всё нормально получилось.... хз, что меня переклинило с этим...

Думал способ какой-то штатный в четвёрке был... просто найти не мог... если что, то можно ещё накостылить как-то так...
Код:
QSignalMapper map0;
QSignalMapper map1;

connect(dlg, SIGNAL(accepted()), map0, SLOT(map()));
map0->setMapping(dlg, 0);
connect(map0, SIGNAL(mapped(int)), this, SIGNAL(quit(int)));
connect(dlg, SIGNAL(accepted()), map1, SLOT(map()));
map0->setMapping(dlg, 1);
connect(map0, SIGNAL(mapped(int)), this, SIGNAL(quit(int)));
« Последнее редактирование: Февраль 29, 2016, 10:03 от Fat-Zer » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Февраль 29, 2016, 10:49 »

У класса "QEventLoop" нет слота "quit(int)" - только "quit()".
эх, проглядел... увидел exit() и обрадовался, а дальше не промотал... спасибо...

А если бы был, то можно было бы воспользоваться сигналом "void QDialog::finished(int result)", который подключить к соответствующему слоту.
собственно там не QDialog, но сигналы всё равно вводить... почему-то я сам не догадался int кинуть... спасибо...

Новый стандарт позволяет сразу на месте определить что и куда испускать.
Qt4... тут без компромиссов...  но в силу ряда причин, вероятно, сделаю сигналы бустовскими (всё равно везде используется)... очень уж не комильфо будет в отдельном слоте всё делать... всё нормально получилось.... хз, что меня переклинило с этим...

Думал способ какой-то штатный в четвёрке был... просто найти не мог... если что, то можно ещё накостылить как-то так...
Код:
QSignalMapper map0;
QSignalMapper map1;

connect(dlg, SIGNAL(accepted()), map0, SLOT(map()));
map0->setMapping(dlg, 0);
connect(map0, SIGNAL(mapped(int)), this, SIGNAL(quit(int)));
connect(dlg, SIGNAL(accepted()), map1, SLOT(map()));
map0->setMapping(dlg, 1);
connect(map0, SIGNAL(mapped(int)), this, SIGNAL(quit(int)));


Если использовать лямбды с++11, то можно в connect'е вызывать quit с нужным значением
Записан

Fat-Zer
Гость
« Ответ #5 : Февраль 29, 2016, 11:09 »

Если использовать лямбды с++11, то можно в connect'е вызывать quit с нужным значением
в четвёрке нет такого connect'а.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 23.