Название: Передача параметров в слот Отправлено: Crazy Sage от Март 20, 2009, 11:45 Можно ли сделать так:
Два QAction'а, на их сигналы activated() зацеплен один и тот же слот,которому передается некий интовый флаг и он в зависимости от флага обрабатывает каждый сигнал по своему (просто есть достаточно большое количество одинакового для всех сигналов кода)? Или придется делать отдельные слоты? Название: Re: Передача параметров в слот Отправлено: yesrus от Март 20, 2009, 11:48 Передавайте Ваще значение как и любой другой функции...никаких пробелм с этим нет.
Название: Re: Передача параметров в слот Отправлено: igor_bogomolov от Март 20, 2009, 11:58 Множество сигналов можно связать с одним слототом. Параметры можно и не передавать. Узнать кто прислал сигнал можно через:
Цитировать QObject * QObject::sender () const [protected] Название: Re: Передача параметров в слот Отправлено: Crazy Sage от Март 20, 2009, 12:00 Я создал слот
void DlgMain::threadSlot(int flag) и пытаюсь сделать connect(sinAction, SIGNAL(activated()), this, SLOT(threadSlot(1))); connect(cosAction, SIGNAL(activated()), this, SLOT(threadSlot(2))); компилится нормально, но при выполнении в дебаг падает QObject::connect: No such slot DlgMain::threadSlot(1) QObject::connect: No such slot DlgMain::threadSlot(2) Название: Re: Передача параметров в слот Отправлено: igor_bogomolov от Март 20, 2009, 12:10 Несовместимые параметры в сигнале и слоте.
Замените на connect(sinAction, SIGNAL(activated()), this, SLOT(threadSlot())); connect(cosAction, SIGNAL(activated()), this, SLOT(threadSlot())); И читайте пост выше. Надеюсь подойдет для тройки. Название: Re: Передача параметров в слот Отправлено: Crazy Sage от Март 23, 2009, 09:46 Спасибо, QObject::sender() это то, что надо.
Название: Re: Передача параметров в слот Отправлено: kolob от Декабрь 17, 2010, 17:26 Спасибо большое! Как раз то что я искал.
У sender и receiver должно быть одинаковое количество параметров, или в sender может быть больше, но они будут игнорироваться receiver-ом. У activated() нет ни каких параметров! Название: Re: Передача параметров в слот Отправлено: voral от Декабрь 17, 2010, 18:38 У sender и receiver должно быть одинаковое количество параметров, или в sender может быть больше, но они будут игнорироваться receiver-ом. У activated() нет ни каких параметров! Что то вы зпутались в понятиях :)sender и receiver - это объекты. А параметры передаются/принимаются сигналом и слотом. Если сигнал не передает ни одного параметра, то и принимать не чего. Однако если слот будет иметь параметр со значением по умолчанию, то его можно вешать на сигнал ни чего не передающий. Если вам достаточно просто определить что за объект передал сигнал то можно сделать примерно так в слоте Код: MyObjectClass *myObject = dynamic_cast<MyObjectClass *>(sender()); Если же ваш общий код использует некие похожие методы. То нужно эти метод вынести в общий класс пердок. Название: Re: Передача параметров в слот Отправлено: kolob от Декабрь 17, 2010, 20:30 Цитировать Что то вы зпутались в понятиях Я не запутался. Я все сделал как было выше указано. Я не правильно изъяснился. Что то в голову вбилось sender и reciever. С помощью QObject::sender() я получал объект который отправлял этот сигнал, каждому объекту соответствовал ключ. В соответствии с этим ключом в дочернем окне выполнялся определенный код. Код: void MainWin::slot() Что то вроде этого. Это я так просто набросал. У чуть чуть по другому. Я у Action вытаскиваю text() и потом провожу аналогию. и т.д. Название: Re: Передача параметров в слот Отправлено: fuCtor от Декабрь 25, 2010, 06:52 Я создал слот void DlgMain::threadSlot(int flag) и пытаюсь сделать connect(sinAction, SIGNAL(activated()), this, SLOT(threadSlot(1))); connect(cosAction, SIGNAL(activated()), this, SLOT(threadSlot(2))); компилится нормально, но при выполнении в дебаг падает QObject::connect: No such slot DlgMain::threadSlot(1) QObject::connect: No such slot DlgMain::threadSlot(2) На этапе связывание сигнал-слотов НЕЛЬЗЯ указывать параметры которые будут переданы (можно даже исходники посмотреть как это в приниципе работает и будет понятно все). Если нужно как-то разделить (проиндексировать привязанные сигналы, то их можно промапировать, читаем в документации про QSignalMapper |