(Qt) Создать сигнал из QButtonGroup кнопок?

Я так запутался в том, как все это работает.

У меня есть несколько кнопок, которые я помещаю в такую ​​группу:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
AddSlotsToGroup();
}

void MainWindow::AddSlotsToGroup()
{
QButtonGroup* group = new QButtonGroup(this);
group->addButton(ui->slot_0);
group->addButton(ui->slot_1);
//...
}

И я хочу создать слот, который получит идентификатор кнопки, которая была нажата в этой группе. (Извините, если я объяснил это плохо :()

Так что это то, что я сделал (чистая догадка после поиска в Google)

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
AddSlotsToGroup();
connect(QPushButton* group, SIGNAL(buttonClicked(int)), this, SLOT(onGroupButtonClicked(int)));
}

void MainWindow::onGroupButtonClicked(int id)
{
qDebug() << id;
}

И неудивительно, что я получил сообщение о том, что группа является необъявленным идентификатором и что QPushButton был незаконным использованием и т. Д.

Ненавижу говорить, что я использовал только сигналы / слоты из окна дизайнера, так что мне действительно нужно это одно, и тогда я настроен на будущее. 🙂

Спасибо за ваше время. 🙂

1

Решение

Попробуйте следующее:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
AddSlotsToGroup();
}

void MainWindow::AddSlotsToGroup()
{
QButtonGroup* group = new QButtonGroup(this);
group->addButton(ui->slot_0);
group->addButton(ui->slot_1);
//...
connect(group, SIGNAL(buttonClicked(int)),
this, SLOT(onGroupButtonClicked(int)));
}

Кстати, вам нужно сначала изучить C ++, чтобы освоить Qt.

2

Другие решения

Сначала вам нужно включить QButtonGroup.

#include <QButtonGroup>

Ваше соединение повреждено, сначала сохраните указатель «группа» в качестве члена класса, а затем используйте следующее:

connect(group, SIGNAL(buttonClicked(int)), this, SLOT(onGroupButtonClicked(int)));
2

По вопросам рекламы [email protected]