QRadioButtonの使い方(その2)

昨日はQRadioButtonの使い方について簡単に紹介した。 今日は、複数の質問にそれぞれラジオボタンで回答するようなGUIの作り方を説明する。 まず、QRadioButtonのインスタンスを複数作る。

	QWidget *win=new QWidget();
	QVBoxLayout *layout=new QVBoxLayout(win);

	QLabel *label1=new QLabel(QObject::tr("質問1"),win);
	QRadioButton *button11=new QRadioButton("回答1",win);
	QRadioButton *button12=new QRadioButton("回答2",win);
	layout->addWidget(label1);
	layout->addWidget(button11);
	layout->addWidget(button12);

	QLabel *label2=new QLabel(QObject::tr("質問2"),win);
	QRadioButton *button21=new QRadioButton("回答1",win);
	QRadioButton *button22=new QRadioButton("回答2",win);
	layout->addWidget(label2);
	layout->addWidget(button21);
	layout->addWidget(button22);

	win->setLayout(layout);

	win->show();

これだと、すべてが1つのグループになっていて、この6つの中のうち1つしか選択することは出来ない。

ラジオボタンの例

そこで登場するのがQButtonGroup。これは複数のラジオボタンを1まとめにしてグループを作るもの。このグループに入っているボタンは、そのグループ内で1つしか選択できないが、他のグループのボタンは別に選択することができる。

QButtonGroupのインスタンスを作り、各ボタンをaddButtonするだけ。

	QWidget *win=new QWidget();
	QVBoxLayout *layout=new QVBoxLayout(win);

	QButtonGroup *group1=new QButtonGroup(win);
	QLabel *label1=new QLabel(QObject::tr("質問1"),win);
	QRadioButton *button11=new QRadioButton("回答1",win);
	QRadioButton *button12=new QRadioButton("回答2",win);
	group1->addButton(button11);
	group1->addButton(button12);
	layout->addWidget(label1);
	layout->addWidget(button11);
	layout->addWidget(button12);

	QButtonGroup *group2=new QButtonGroup(win);
	QLabel *label2=new QLabel(QObject::tr("質問2"),win);
	QRadioButton *button21=new QRadioButton("回答1",win);
	QRadioButton *button22=new QRadioButton("回答2",win);
	group2->addButton(button21);
	group2->addButton(button22);
	layout->addWidget(label2);
	layout->addWidget(button21);
	layout->addWidget(button22);

	win->setLayout(layout);

	win->show();

これで、以下の様な質問ごとの選択が可能になる。

複数選択した例