Ответ 1
Нет, это невозможно. Вам разрешено подключать слоты с меньшим или равным количеством аргументов, чем в соответствующем сигнале. (см. документация)
Вам нужно создать прокси-слот, который будет называть желаемый.
Для подключения сигналов к слотам, насколько мне известно, параметры сигнала должны соответствовать параметрам слота. Так, например:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));
Но что, если я хочу, чтобы сигнал вызывал слот, который имеет различное количество параметров, но всегда передает постоянное значение в слот. Например, используя вышеприведенный фрагмент кода:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));
Или, другими словами, всякий раз, когда нажимается кнопка, она вызывает функцию setDockWidget()
с ложным параметром. Возможно ли это?
Нет, это невозможно. Вам разрешено подключать слоты с меньшим или равным количеством аргументов, чем в соответствующем сигнале. (см. документация)
Вам нужно создать прокси-слот, который будет называть желаемый.
Вы можете использовать лямбда с желаемым вызовом с аргументом константы. Пример:
connect(obj, &ObjType::signalName, [this]() { desiredCall(constantArgument); });
Подробнее о новом синтаксисе подключения: https://wiki.qt.io/New_Signal_Slot_Syntax.
В некотором смысле, да, вы можете. Но это не очень мощно: просто объявите setDockWidget
следующим образом:
[virtual] void setDockWidget(bool state=false) ;
И объявите соединение таким образом:
connect(emitter, SIGNAL(closeButtonClicked()), receiver, SLOT(setDockWidget()));
setDockWidget, вызываемый без аргументов, принимает значения по умолчанию.