Слот Qt с аргументом по умолчанию - PullRequest
4 голосов
/ 23 февраля 2012

У меня есть блок управления вращением, который изменяет отдельные элементы массива Вместо того, чтобы иметь отдельные функции слотов приемника, я хотел просто указать, какой элемент управления отправил сообщение в сигнале

Вы можете сделать это с помощью QSignalMapper - но есть ли способ сделать это просто, как показано ниже?

spin0 = new QDoubleSpinBox;
connect(spin0,SIGNAL(valueChanged(double)),this,SLOT(handler(0,double));

spin1 = new QDoubleSpinBox;
connect(spin1,SIGNAL(valueChanged(double)),this,SLOT(handler(1,double));
....

private slot:
void handler(int element,double value);

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Из любого обработчика слотов вы можете использовать sender () , чтобы получить указатель на объект, который отправил сигнал.Затем вы можете использовать свойство objectName () для передачи любой дополнительной идентифицирующей информации.

1 голос
/ 23 февраля 2012

Я не верю, по крайней мере, не используя этот синтаксис ... макросы SIGNAL и SLOT превращают свои аргументы в строки, которые затем анализируются и используются средой выполнения Qt для поиска связанных функцийи / или методы класса в таблицах, созданных moc на этапе предварительной обработки компиляции.Поэтому, если вы закодировали аргумент по умолчанию в макросе SLOT, то это недопустимая сигнатура функции, которую Qt может использовать для поиска во время выполнения фактической функции слота в moc -генерированных таблицах функций.

...