본문 바로가기
SWE/Qt

Qt예제] QCheckBox를이용해 다중 선택하기

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

QCheckBox

: 어떤 항목을 선택했는지 판단하기 위해 사용

선택된 상태 / 선택되지 않은 상태 / 이미 선택되어 있는 것처럼 보이게 하는 상태

 

stateChange() :  QCheckBox 위젯의 상태를 변경할 수 있다.

isChecked() : 이 위젯이 체크되었는지 알 수 있다.

 

setTristate() : 파라미터 값으로 true 넘겨주면 된다.

-> 필수로 선택해야 하거나 디폴트로 선택되어 있는 것을 나타내는 방식

 

setIcon() : 아이콘을 추가할 수 있다.

 

 

 

<QCheckBox 위젯을 이용해 다중 선택하기>

 

예제 결과

예제 결과
예제결과 _클릭시
예제결과 _ 디버깅 출력

두 번째 캡쳐사진처럼 Korean항목을 선택하면 아래와 같이 출력한다.

 

각 QCheckBox의 아이콘은 비주얼스튜디오 이미지를 캡쳐해서 썼다.... 이미지 구하기 귀찮았움... 허허

 

 

// mywidget.h

#include <QDialog>

class QCheckBox;
class QHBoxLayout;

class MyWidget : public QDialog
{
	Q_OBJECT

	public :
		MyWidget();

	private :
		QCheckBox *checkbox1;
		QCheckBox *checkbox2;
		QCheckBox *checkbox3;
		QCheckBox *checkbox4;

		QHBoxLayout *layout;

	private slots:
		void eventChange();
	// 체크박스 항목이 선택되었을 때, 이벤트 발생시키기 위해
};

 

 

// mywidget.cpp

#include <QtGui>
#include "mywidget.h"

MyWidget::MyWidget()
{
	setFixedSize(500,100);

	checkbox1 = new QCheckBox("Korean");
	checkbox2 = new QCheckBox("English");
	checkbox3 = new QCheckBox("Math");
	checkbox4 = new QCheckBox("Science");

	checkbox4->setTristate(true);
	// 네 번째 상태가 자동으로 체크되도록-> 회색

	static QIcon Img(QPixmap("./images/icon.png"));

	checkbox1->setIcon(Img);
	checkbox2->setIcon(Img);
	checkbox3->setIcon(Img);
	checkbox4->setIcon(Img);
	// QCheckBox 위젯을 아이콘 이미지와 함께 사용하기 위해

	connect(checkbox1, SIGNAL(clicked()), this, SLOT(eventChange()));
	connect(checkbox2, SIGNAL(clicked()), this, SLOT(eventChange()));
	connect(checkbox3, SIGNAL(clicked()), this, SLOT(eventChange()));
	connect(checkbox4, SIGNAL(clicked()), this, SLOT(eventChange()));

	layout = new QHBoxLayout;
	layout->addWidget(checkbox1);
	layout->addWidget(checkbox2);
	layout->addWidget(checkbox3);
	layout->addWidget(checkbox4);

	setLayout(layout);
}

// QCheckBox 위젯을 선택하면 qDebug() 함수를 이용해
// 터미널에 QCheckBox위젯의 상태를 프린트한다.
void MyWidget::eventChange()
{
	qDebug("------------------------------------");
	// qDebug : 디벚깅에 유용한 함수

	if(checkbox1->checkState())
	{
		qDebug("[Korean] checked.");
	}
	else
	{
		qDebug("[Korean] UnChecked.");
	}
	
	if(checkbox2->checkState())
	{
		qDebug("[English] checked.");
	}
	else
	{
		qDebug("[English] UnChecked.");
	}

	if(checkbox3->checkState())
	{
		qDebug("[Math] checked.");
	}
	else
	{
		qDebug("[Math] UnChecked.");
	}

	if(checkbox4->checkState())
	{
		qDebug("[Science] checked.");
	}
	else
	{
		qDebug("[Science] UnChecked.");
	}
}

 

 

// main.cpp

#include <QApplication>
#include <QStyleFactory>

#include "mywidget.h"

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

	QStringList styles = QStyleFactory::keys();
	app.setStyle( styles[3] );

	widget.show();
	return app.exec();
}
반응형