[Qt] QRadioButton 만들기

이번 글에서는 라디오 버튼을 만들어보겠습니다.

프로젝트 하나 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에서 라디오 버튼에 대해 알아보았습니다.