В моем проекте у меня 40 QPushButton
все положить в QButtonGroup
как это:
QButtonGroup* group = new QButtonGroup(this);
group->addButton(ui->slot_0);
group->addButton(ui->slot_1);
//...
group->addButton(ui->slot_38);
group->addButton(ui->slot_39);
Каждая кнопка является QPushButton
что я сделал проверяемым. Таким образом, только одна кнопка может быть проверена за один раз. Все отлично работает, но как я могу «сделать слот», когда одна из кнопок становится проверенной? Я не хочу иметь 40 разных слотов, по одному на каждую кнопку, чтобы в конечном итоге делать одно и то же. Есть ли способ, которым я могу просто использовать QButtonGroup
Я положил их в?
Как заявили Джамин и Никос: вы должны создать свой собственный слот для обработки сигнала, излучаемого QButtonGroup. Это может быть что-то вроде этого:
В заголовочном файле:
public slots:
void buttonWasClicked(int);
В файле * .cpp:
void MainWindow::buttonWasClicked(int buttonID)
{
cout << "You have clicked button: " << buttonID << endl;
}
И в коде, отвечающем за создание MainWindow (т.е. в конструкторе, но не обязательно), должна быть следующая строка:
connect(group, SIGNAL(buttonClicked(int)), this, SLOT(buttonWasClicked(int)));
Имейте в виду, что начиная с Qt5 синтаксис соединения изменился. Синтаксис, который я здесь использовал, взят из Qt4. Это все еще работает, но не рекомендуется (для получения дополнительной информации обратитесь к Новый синтаксис слота сигналов в Qt 5). Более того, я бы посоветовал перейти к справке по классам QButtonGroup, так как есть другие доступные сигналы, которые могут удовлетворить ваши потребности лучше, чем тот, который я выбрал.
BR
Документация для QButtonGroup
показывает QButtonGroup::buttonClicked()
сигнал — вы уже пробовали это?
Сигнал приходит в двух вариантах — один, который дает QPushButton
в качестве параметра (как QAbstractButton
) и тот, который дает идентификатор кнопки в группе.
Ты можешь использовать connect()
для настройки соединения сигналов и слотов в вашем коде C ++.
Когда-нибудь во время инициализации класса вашего окна (возможно, в конструкторе), вызовите это:
connect(myButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(theSlotThatYouWrite(QAbstractButton*));
куда myButtonGroup
возможно this->ui->nameOfTheButtonGroup
, а также theSlotThatYouWrite
это функция, которую вы пишете в своем собственном коде, которая принадлежит классу вашего окна, которая возвращает void и принимает сигнал QAbstractButton*
в качестве параметра (так как это то, что этот конкретный сигнал дает в качестве аргумента).
Удостовериться theSlotThatYouWrite
находится под меткой «private slots:» или «public slots:» в интерфейсе вашего класса.
Вот скриншот фактического использования некоторых сигналов и слотов в моем собственном коде.
Сигналы и слоты очень важны для изучения, но они могут быть чем-то вроде подъема, когда вы впервые пытаетесь это понять!