Как я могу подключить нажатие () сигнала 32 кнопок к одной функции без объявления 32 слотов? - PullRequest
5 голосов
/ 26 ноября 2009

У меня есть виджет и внутри него 32 кнопки. Мне нужно подключить сигнал каждой кнопки selected () к слоту, чтобы вызвать функцию, параметры которой зависят от того, какую кнопку я нажал. Прямо сейчас я сделал это, добавив 32 слота в виде on_QPushButtonName_pressed () но это много слотов. Мне было интересно, есть ли другой способ, которым я мог бы сделать это, меньше. Я сделал нечто подобное, но я работал с пользовательскими виджетами, чтобы я мог просто создать новый сигнал в коде моего класса, но я бы хотел избежать создания пользовательского виджета для одной кнопки.

Ответы [ 2 ]

8 голосов
/ 26 ноября 2009

Используйте класс QSignalMapper. В документации - http://doc.qt.io/qt-5/qsignalmapper.html - есть пример, довольно близкий к тому, что вы хотите.

2 голосов
/ 26 ноября 2009

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

Как уже упоминал Рохан, QSignalMapper является рекомендуемым решением, так как sender () немного хакерский. Его преимущество в том, что им проще пользоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...