Подключите сигналы к слотам с постоянными значениями - PullRequest
14 голосов
/ 25 марта 2012

Для подключения сигналов к слотам, насколько я знаю, параметры сигнала должны соответствовать параметрам слота. Так, например:

connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));

Но что, если я хочу, чтобы сигнал вызывал слот с другим количеством параметров, но всегда передавал постоянное значение в слот. Например, используя приведенный выше фрагмент кода:

connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));

Или другими словами, всякий раз, когда нажимается кнопка, она вызывает функцию setDockWidget() с параметром false. Возможно ли это?

Ответы [ 3 ]

13 голосов
/ 17 декабря 2015

Вы можете использовать лямбду с желаемым вызовом с постоянным аргументом . Пример:

connect(obj, &ObjType::signalName, [this]() { desiredCall(constantArgument); });

Подробнее о новом синтаксисе подключения: https://wiki.qt.io/New_Signal_Slot_Syntax.

8 голосов
/ 25 марта 2012

Нет, это невозможно.Вам разрешено подключать слоты только с меньшим или равным количеством аргументов, чем в соответствующем сигнале.(см. документация )

Вы должны создать слот прокси, который будет вызывать нужный.

6 голосов
/ 25 марта 2012

В некотором смысле, да, вы можете.Но он не очень мощный: просто объявите setDockWidget следующим образом:

[virtual] void setDockWidget(bool state=false) ;

И объявите соединение следующим образом:

connect(emitter, SIGNAL(closeButtonClicked()), receiver, SLOT(setDockWidget()));

setDockWidget, вызываемый без аргументов, принимает значения по умолчанию.

...