Russian Qt Forum

Qt => Общие вопросы => Тема начата: Fat-Zer от Февраль 28, 2016, 15:45



Название: Qt4 маппинг сигналов
Отправлено: Fat-Zer от Февраль 28, 2016, 15:45
Что-то туплю и не могу найти в документации: как замапить два разных сигнала с одного объекта на один слот с разными параметрами другого
Код:
connect(dlg, SIGNAL(accepted()), &eventLoop, SLOT (quit(0)) ); //< передать в quit нуль
connect(dlg, SIGNAL(rejected()), &eventLoop, SLOT (quit(1)) ); //< передать в quit единицу


Название: Re: Qt4 маппинг сигналов
Отправлено: VPS от Февраль 28, 2016, 16:39
У класса "QEventLoop" нет слота "quit(int)" - только "quit()".
А если бы был, то можно было бы воспользоваться сигналом "void QDialog::finished(int result)", который подключить к соответствующему слоту.


Название: Re: Qt4 маппинг сигналов
Отправлено: Bepec от Февраль 28, 2016, 16:40
Новый стандарт позволяет сразу на месте определить что и куда испускать. А не используя новый - только разруливать самому в слоте.


Название: Re: Qt4 маппинг сигналов
Отправлено: Fat-Zer от Февраль 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)));


Название: Re: Qt4 маппинг сигналов
Отправлено: gil9red от Февраль 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 с нужным значением


Название: Re: Qt4 маппинг сигналов
Отправлено: Fat-Zer от Февраль 29, 2016, 11:09
Если использовать лямбды с++11, то можно в connect'е вызывать quit с нужным значением
в четвёрке нет такого connect'а.