본문 바로가기
SWE/Qt

Qt예제] QGroupBox 를 이용해 위젯 그룹

by S나라라2 2019. 8. 29.
반응형

 

 

QGroupBox

: QButtonGroup 위젯과 기능이 같다.

예제 실행 결과

예제 결과

 

구현 코드

 

// window.h

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>

class QGroupBox;

class Window : public QWidget
{
	Q_OBJECT

public :
	Window(QWidget *parent = 0 );

private :
	QGroupBox *createFirstExclusiveGroup();
	QGroupBox *createSecondExclusiveGroup();
	QGroupBox *createNonExclusiveGroup();
	QGroupBox *createPushButtonGroup();
};

#endif

 

// window.cpp

#include <QtGui>
#include <QLayout>

#include "window.h"

Window::Window(QWidget *parent)
: QWidget(parent)
{
	QGridLayout *grid = new QGridLayout;
	grid->addWidget(createFirstExclusiveGroup(), 0, 0);
	grid->addWidget(createSecondExclusiveGroup(), 1, 0);
	grid->addWidget(createNonExclusiveGroup(), 0, 1);
	grid->addWidget(createPushButtonGroup(), 1, 1);
	setLayout(grid);

	setWindowTitle(tr("Group Boxes"));
	resize(480,320);
}

// 일반적인 형태의 QGroupBox
QGroupBox *Window::createFirstExclusiveGroup()
{
	QGroupBox *groupBox = new QGroupBox(tr("Exclusive Radio Buttons"));
	QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1"));
	QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2"));
	QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3"));

	radio1->setChecked(true);

	QVBoxLayout *vbox = new QVBoxLayout;
	vbox->addWidget(radio1);
	vbox->addWidget(radio2);
	vbox->addWidget(radio3);
	vbox->addStretch(1);
	groupBox->setLayout(vbox);

	return groupBox;
}

// 
// setCheckable() 함수 사용
QGroupBox *Window::createSecondExclusiveGroup()
{
	QGroupBox *groupBox = new QGroupBox(tr("Exclusive Radio Buttons"));
	groupBox->setCheckable(true);
	groupBox->setChecked(false);

	QRadioButton *radio1 = new QRadioButton(tr("Radio Button 1"));
	QRadioButton *radio2 = new QRadioButton(tr("Radio Button 2"));
	QRadioButton *radio3 = new QRadioButton(tr("Radio Button 3"));
	radio1->setChecked(true);
	QCheckBox *checkBox = new QCheckBox(tr("Independent checkbox"));
	checkBox->setChecked(true);

	QVBoxLayout *vbox = new QVBoxLayout;
	vbox->addWidget(radio1);
	vbox->addWidget(radio2);
	vbox->addWidget(radio3);
	vbox->addWidget(checkBox);
	vbox->addStretch(1);
	groupBox->setLayout(vbox);

	return groupBox;
}

// 윗줄만 표시하는 형태
// setFlat() 함수 사용
QGroupBox *Window::createNonExclusiveGroup()
{
	QGroupBox *groupBox = new QGroupBox(tr("Non-Exclusive Checkboxes"));
	groupBox->setFlat(true);

	QCheckBox *checkBox1 = new QCheckBox(tr("Checkbox 1"));
	QCheckBox *checkBox2 = new QCheckBox(tr("Checkbox 2"));
	checkBox2->setChecked(true);
	QCheckBox *tristateBox = new QCheckBox(tr("Tri-state button"));
	tristateBox->setTristate(true);
	tristateBox->setCheckState(Qt::PartiallyChecked);

	QVBoxLayout *vbox = new QVBoxLayout;
	vbox->addWidget(checkBox1);
	vbox->addWidget(checkBox1);
	vbox->addWidget(tristateBox);
	vbox->addStretch(1);
	groupBox->setLayout(vbox);
	
	return groupBox;
}

// Push Button그룹은 QPushButton위젯을 포함한다.
//마지막 버튼인 Popup Button을 클릭하면 메뉴가 펼쳐진다.
// 이러한 효과를 주려면 QMenu위젯을 사용해야함.
QGroupBox *Window::createPushButtonGroup()
{
	QGroupBox *groupBox = new QGroupBox("Push Buttons");
	groupBox->setCheckable(true);
	groupBox->setChecked(true);

	QPushButton *pushButton = new QPushButton(tr("Normal Button"));
	QPushButton *toggleButton = new QPushButton(tr("Toggle Button"));
	toggleButton->setCheckable(true);
	toggleButton->setChecked(true);
	QPushButton *flatButton = new QPushButton(tr("Flat Button"));
	flatButton->setFlat(true);

	QPushButton *popupButton = new QPushButton(tr("Popup Button"));
	QMenu *menu = new QMenu(this);
	menu->addAction(tr("&First Time"));
	menu->addAction(tr("&Second Time"));
	menu->addAction(tr("&Third Time"));
	menu->addAction(tr("&Fourth Item"));
	popupButton->setMenu(menu);

	QVBoxLayout *vbox = new QVBoxLayout;
	vbox->addWidget(pushButton);
	vbox->addWidget(toggleButton);
	vbox->addWidget(flatButton);
	vbox->addWidget(popupButton);
	vbox->addStretch(1);
	groupBox->setLayout(vbox);

	return groupBox;

}

 

// main.cpp

#include <QApplication>
#include <QStyleFactory>

#include "window.h"

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	QStringList styles = QStyleFactory::keys();

	app.setStyle(styles[3]);

	Window window;
	window.show();
	return app.exec();
}

 

QGroupBox위젯은 이 외에도 다양하게 변경시킬 수 있는 옵션으로,

그룹에 포함된 위젯의 정렬을 변경시킬 수 있는데, 

종류는 다음과 같다.

Qt::AlignLeft  // 그룹에 포함된 위젯을 왼쪽정렬

Qt::AlignRight // 그룹에 포함된 위젯을 오른쪽 정렬

Qt::AlignHCenter  // 그룹에 포함된 위젯을 가운데로 정렬

 

 

반응형