Подтвердить что ты не робот

Подключите сигналы к слотам с постоянными значениями

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

И объявите соединение таким образом:

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

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