Передача кратных аргументов в слот Qt

#c #qt #signals #connect #slots

#c #qt #сигналы #Контакты #слоты

Вопрос:

Я использую горизонтальный ползунок Qt и хочу подключить его сигнал с измененным значением к определенному мной слоту. Однако мне нужно получить доступ к определенному элементу внутри этого слота, чтобы изменить переменную благодаря int, который я установил с помощью ползунка. До сих пор моя строка подключения выглядит так :

connect(slider, SIGNAL(valueChanged(int)), this, SLOT(setVariable(int)));

Возможно ли передать более одного аргумента в мой слот?То, что я хотел бы сделать, это что-то вроде :

connect(slider, SIGNAL(valueChanged(int)), this, SLOT(setVariable(int, pointerToMember*)));

Если нет, как я могу продолжить?

Спасибо

Комментарии:

1. Откуда берется значение pointerToMember* ? Если он известен во время connect вызова, вы можете использовать захват lambda в качестве слота.

2. Мой указатель определен в том же методе, с помощью которого я создал это соединение, несколькими строками ранее, поэтому, я думаю, я могу попробовать ваше предложение

3. какую версию QT вы используете?

4. Я работаю над Qt 6.2.1

Ответ №1:

Да, вы можете, но вам нужно использовать новый стиль подключения, чтобы вы могли передавать лямбда-функцию

 connect(slider, amp;QAbstractSlider::valueChanged, this, [=](int amp;new_value) { this->setVariable(new_value, ... );});
 

Редактировать:
Это работает только в Qt5 и выше