이번 글에서는 라디오 버튼을 만들어보겠습니다.
프로젝트 하나 Widget으로 생성해주고 폼 파일에 위와 같이 Vertical Layout에 라디오 버튼 3개, 라벨 1개를 만들어 줍니다.
그리고 라디오버튼1~3, 라벨에 objectName과 text 속성을 위와 같이 변경해줍니다.
코드를 짜보겠습니다. Widget.h 파일에 아래와 같이 코딩해줍니다.
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QButtonGroup>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QButtonGroup *m_group;
public slots:
void slot_buttonClicked(QAbstractButton* pButton);
};
#endif // WIDGET_H
QButtonGroup은 라디오 버튼을 그룹화 하기위한 코드이고, 라디오 버튼 클릭 시 실행할 slot 함수입니다.
하이라이트 코드를 참고 하시면 됩니다.
그 다음 Widget.cpp에 아래와 같이 코딩합니다.
#include "Widget.h"
#include "ui_Widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 1번 라디오 버튼만 체크
ui->radioButton1->setChecked(true);
ui->radioButton2->setChecked(false);
ui->radioButton3->setChecked(false);
// 1번 라디오 버튼 체크됐다고 라벨에 표시
QString str = QString("clicked button: %1").arg(ui->radioButton1->text());
ui->label->setText(str);
// 버튼 그룹에 라디오버튼 1~3 추가
m_group = new QButtonGroup(this);
m_group->addButton(ui->radioButton1);
m_group->addButton(ui->radioButton2);
m_group->addButton(ui->radioButton3);
m_group->setExclusive(true); // Exclusive 설정
// 클릭 시그널, 슬롯 연결
connect(m_group, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(slot_buttonClicked(QAbstractButton*)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::slot_buttonClicked(QAbstractButton *pButton)
{
QRadioButton *pRadio = (QRadioButton*)pButton; // 클릭한 라디오 버튼
// 라벨에 표시
QString str = QString("clicked button: %1").arg(pRadio->text());
ui->label->setText(str);
}
하이라이트 된 코드의 주석을 살펴보시면 됩니다.
실행 하면 아래와 같이 실행합니다.
이상으로 Qt에서 라디오 버튼에 대해 알아보았습니다.