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

StackOverflow https://stackoverflow.com/questions/1801167

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top