Как я могу подключить нажатие () сигнала 32 кнопок к одной функции без объявления 32 слотов?
-
05-07-2019 - |
Вопрос
У меня есть виджет, и внутри него 32 кнопки. Мне нужно подключить сигнал каждой кнопки selected () к слоту, чтобы вызвать функцию, параметры которой зависят от того, какую кнопку я нажал. Прямо сейчас я сделал это, добавив 32 слота в виде on_QPushButtonName_pressed () но это много слотов. Мне было интересно, есть ли другой способ, которым я мог бы сделать это, меньше. Я сделал что-то похожее, но я работал с пользовательскими виджетами, чтобы я мог просто создать новый сигнал в коде моего класса, но я бы хотел избежать создания пользовательского виджета только для одной кнопки.
Решение
Используйте класс QSignalMapper. Документация - http://doc.qt.io/qt-5/qsignalmapper.html. - пример довольно близок к тому, что вы хотите.
Другие советы
Еще одна возможность: создать только один слот, вызвать sender ()
и включить результат.
Как уже упоминал Рохан, QSignalMapper является рекомендуемым решением, так как sender () является чем-то вроде хака. Его преимущество в том, что им проще пользоваться.