Qt의 시그널과 슬롯 메커니즘은 GUI 프로그래밍에서 중요한 역할을 합니다. 이를 통해 특정 이벤트가 발생했을 때 해당 동작을 실행할 수 있습니다. 아래에서는 체크박스와 라디오버튼을 이용해 텍스트의 폰트 스타일과 색상을 제어하는 방법을 설명하겠습니다.
1. 기본 개념
클래스 간의 상속 관계는 부모 클래스로부터 속성과 메서드를 물려받아 새로운 기능을 추가하거나 수정하는 것을 의미합니다. Qt에서의 시그널과 슬롯은 객체 간의 통신 방식으로, 버튼 클릭이나 상태 변화 같은 이벤트가 발생하면 연결된 슬롯 함수가 자동으로 호출됩니다.
예를 들어, 체크박스가 활성화되면 텍스트를 굵게 만들거나 색상을 바꾸는 작업을 수행할 수 있습니다.
2. 코드 구현
텍스트 박스의 폰트 스타일을 변경하는 예제를 살펴보겠습니다. 다음은 각 체크박스 클릭에 따라 텍스트의 굵기, 이탤릭체, 밑줄을 적용하는 코드입니다.
void MainWindow::applyFontStyle(bool isChecked)
{
QFont currentFont = ui->textEdit->font();
if (sender() == ui->boldCheckBox) {
currentFont.setBold(isChecked);
} else if (sender() == ui->italicCheckBox) {
currentFont.setItalic(isChecked);
} else if (sender() == ui->underlineCheckBox) {
currentFont.setUnderline(isChecked);
}
ui->textEdit->setFont(currentFont);
}
void MainWindow::onFontSizeButtonClicked()
{
QFont font = ui->textEdit->font();
font.setPointSize(20); // 글꼴 크기 설정
ui->textEdit->setFont(font);
}
위 코드에서 applyFontStyle 함수는 체크박스 상태에 따라 폰트 스타일을 조정하며, onFontSizeButtonClicked 함수는 특정 버튼 클릭 시 글꼴 크기를 변경합니다.
3. 폰트 색상 변경
다음으로 라디오버튼을 사용해 텍스트의 색상을 변경하는 방법을 보겠습니다. 이를 위해 슬롯 함수를 정의하고, 라디오버튼 클릭 시 호출되도록 설정합니다.
void MainWindow::changeTextColor()
{
QPalette palette = ui->textEdit->palette();
if (ui->blueRadioButton->isChecked()) {
palette.setColor(QPalette::Text, Qt::blue);
} else if (ui->redRadioButton->isChecked()) {
palette.setColor(QPalette::Text, Qt::red);
} else if (ui->blackRadioButton->isChecked()) {
palette.setColor(QPalette::Text, Qt::black);
}
ui->textEdit->setPalette(palette);
}
이 함수는 선택된 라디오버튼에 따라 텍스트 색상을 다르게 설정합니다.
4. 시그널-슬롯 연결
마지막으로 위에서 정의한 슬롯 함수들을 실제 UI 요소와 연결해야 합니다. 이를 위해 connect 함수를 사용합니다.
connect(ui->boldCheckBox, &QCheckBox::clicked, this, &MainWindow::applyFontStyle);
connect(ui->italicCheckBox, &QCheckBox::clicked, this, &MainWindow::applyFontStyle);
connect(ui->underlineCheckBox, &QCheckBox::clicked, this, &MainWindow::applyFontStyle);
connect(ui->fontSizeButton, &QPushButton::clicked, this, &MainWindow::onFontSizeButtonClicked);
connect(ui->blueRadioButton, &QRadioButton::clicked, this, &MainWindow::changeTextColor);
connect(ui->redRadioButton, &QRadioButton::clicked, this, &MainWindow::changeTextColor);
connect(ui->blackRadioButton, &QRadioButton::clicked, this, &MainWindow::changeTextColor);
각 UI 요소의 시그널과 슬롯을 연결하면, 사용자가 인터페이스를 조작할 때 원하는 동작이 자동으로 실행됩니다.