반응형
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 // 그룹에 포함된 위젯을 가운데로 정렬
반응형