Member 13020023 Ответов: 1

Qt - пользовательский сигнал, посылающий целое число


У меня есть множество пользовательских кнопок. Я хочу создать пользовательский сигнал, который при подключении к слоту, принимающему целое число в качестве аргумента, будет посылать ему переменную.
Так, например, предположим, что у меня есть 10 кнопок, каждая из которых имеет идентификатор от 0 до 9. Я соединяю их все с одной функцией, которая принимает целочисленный аргумент. Функция при вызове выводит свой аргумент. Теперь, когда я нажимаю кнопку 4, я хочу, чтобы на моем экране была напечатана цифра 4.

Я никогда раньше не создавал собственный сигнал, поэтому буду очень благодарен за любую помощь.

Что я уже пробовал:

Я еще ничего не пробовал. Я только создал класс.

Richard MacCutchan

У вас есть 10 кнопок, каждая из которых имеет идентификатор. Поэтому, когда ваша функция вызывается, вам просто нужно определить, какая кнопка вызвала ее. Я не знаю, как это работает в Qt, в C# идентификатор кнопки будет отправлен в функцию.

1 Ответов

Рейтинг:
1

Jochen Arndt

Просто реализовать QPushButton::clicked() слот, который соединен с несколькими кнопками. Внутри этого гипса sender() к QPushButton* чтобы получить доступ к кнопке и идентифицировать ее. Затем вы можете излучать определенный пользователем сигнал с дополнительными параметрами.

Другой способ будет использовать C++11 лямбда:

int counter = 1;

// Create button or access it using the ui member 
//QPushButton *button = new QPushButton;

button->setProperty("myId", counter++);
connect(button, &QPushButton::clicked, [this, button](){
    qDebug() << button->property("myId").toString();
    ui->label->setText(button->text());
});

// Repeat for the other buttons
Вышеизложенное заключается в использовании системы свойств для предоставления идентификаторов, печати их в окне отладки и установки метки к тексту заголовка кнопки.