임베디드 관련 카테고리/Qt

Qt에서 클래스 이름 앞에 'Q'가 붙는 이유와 주요 클래스의 역할

CBJH 2024. 10. 22.
728x90
반응형

Qt를 사용하다 보면 클래스 이름 앞에 항상 'Q'가 붙는 것을 볼 수 있습니다. 예를 들어, QMainWindow, QWidget, QPushButton 같은 클래스들이 있습니다. 이번 글에서는 Q가 붙는 클래스가 무엇을 의미하고, 어떤 역할을 하는지 알아보겠습니다.


1. Q가 붙는 클래스란?

  • Q로 시작하는 클래스는 모두 Qt 라이브러리의 클래스입니다.
  • Qt에서 UI, 이벤트, 네트워크 등 다양한 기능을 제공하는 클래스들이 Q로 시작합니다.
  • QQt 프레임워크를 나타내는 약자입니다.

2. 주요 Q 클래스와 역할

1) QMainWindow

class QMainWindow : public QWidget
  • QMainWindow애플리케이션의 기본 창을 제공합니다.
  • 메뉴 바, 도구 모음, 상태 표시줄과 같은 고급 UI 요소를 쉽게 추가할 수 있습니다.

역할:

  • 메인 창을 구성할 때 사용합니다.
  • 여러 개의 위젯과 레이아웃을 포함할 수 있는 기본 창입니다.

2) QWidget

class QWidget : public QObject
  • QWidget모든 UI 요소의 기본 클래스입니다.
  • 버튼, 라벨, 텍스트 필드 등 대부분의 위젯이 QWidget을 상속합니다.

역할:

  • 기본 UI 요소를 정의합니다.
  • 위젯의 크기, 위치, 모양 등을 제어합니다.

3) QPushButton

class QPushButton : public QAbstractButton
  • QPushButton클릭할 수 있는 버튼을 제공하는 클래스입니다.

역할:

  • 사용자가 클릭하면 시그널(clicked) 이벤트를 발생시킵니다.
  • 버튼 클릭 시 다른 함수를 호출하는 등의 동작을 수행할 수 있습니다.

4) QVBoxLayout, QHBoxLayout

  • QVBoxLayout: 수직 정렬을 위한 레이아웃입니다.
  • QHBoxLayout: 수평 정렬을 위한 레이아웃입니다.

역할:

  • 여러 UI 요소를 정렬하고 배치하는 데 사용됩니다.

5) QObject

class QObject
  • QObject모든 Qt 객체의 기본 클래스입니다.
  • 시그널(Signal)과 슬롯(Slot) 시스템을 제공합니다.

역할:

  • 위젯 간의 이벤트 전달과 처리를 담당합니다.
  • 객체 간 통신을 위한 시그널과 슬롯 시스템의 기반이 됩니다.

3. Qt 클래스 구조 관계

Qt 클래스는 계층적 구조를 가지고 있습니다. 예를 들어:

  • QWidget이 모든 UI 요소의 기본 클래스입니다.
  • QMainWindow와 같은 고급 창도 QWidget을 상속받아 기능을 확장합니다.
  • 작은 버튼과 라벨 같은 요소들도 QWidget을 기반으로 만들어집니다.

4. 예제 코드: 버튼 클릭 이벤트 처리

아래는 QPushButton을 사용해 "Click Me" 버튼을 클릭하면 메시지 박스를 표시하는 예제 코드입니다.

#include <QApplication>
#include <QPushButton>
#include <QMessageBox>

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

    QPushButton button("Click Me");
    button.resize(200, 100);
    button.show();

    QObject::connect(&button, &QPushButton::clicked, []() {
        QMessageBox::information(nullptr, "Hello", "Hello, World!");
    });

    return app.exec();
}

코드 설명:

  1. QApplication: 애플리케이션의 진입점 역할을 하는 클래스입니다.
  2. QPushButton: "Click Me"라는 텍스트가 있는 버튼을 생성합니다.
  3. QObject::connect(): 버튼이 클릭되면 메시지 박스가 표시되도록 연결합니다.
  4. QMessageBox: "Hello, World!"라는 메시지를 표시하는 정보 창을 생성합니다.

5. 생성자 코드 설명: MainWindow 클래스

생성자(Constructor)는 객체가 생성될 때 자동으로 호출됩니다.
아래는 MainWindow 클래스의 생성자 코드입니다.

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 버튼 클릭 이벤트 연결 (코드에서 한 번만 연결)
    connect(ui->pushButton1, &QPushButton::clicked, this, &MainWindow::on_pushButton1_clicked);
}

코드 설명:

  1. MainWindow::MainWindow(QWidget *parent):
    • 생성자의 이름은 클래스 이름과 동일해야 합니다.
    • QWidget *parent는 부모 위젯을 나타냅니다.
  2. : QMainWindow(parent):
    • 부모 클래스(QMainWindow)의 생성자를 호출해 초기화합니다.
  3. ui(new Ui::MainWindow):
    • UI 객체를 동적으로 생성합니다.
  4. ui->setupUi(this):
    • UI 요소들을 초기화하고, 이들을 현재 창(MainWindow)에 설정합니다.
  5. connect() 함수:
    • 버튼의 clicked() 시그널과 **슬롯 함수 on_pushButton1_clicked()**를 연결합니다.

6. 결론

Qt에서 클래스 이름 앞에 'Q'가 붙는 것은 Qt 프레임워크의 클래스임을 나타내는 규칙입니다.

  • QWidget은 모든 UI 요소의 기본 클래스입니다.
  • QMainWindow는 고급 창을 제공하며, 메뉴 바와 상태 표시줄을 쉽게 관리할 수 있습니다.
  • QPushButton은 클릭 가능한 버튼을 제공합니다.

이제 Qt 클래스의 구조와 역할을 이해하고, 간단한 버튼 클릭 이벤트까지 구현할 수 있게 되었습니다! 😊


 

 

댓글