728x90

처음 시작하는 Qt 이기 때문에 다른방법보다 더쉬운 Qt creater 를 사용해서 만들어 보겠습니다.

 

New project를 누르고

 

 

Qt widgets 을 선택합니다.

 

파일이 생성될 경로를 지정해주시고 파일이름을 설정합니다.

 

 

Base class 는 app type을 지정하는데

 

  • QmainWindow (menubar, status bar, tool bar) 기본구조
  • Qwidget 조금더 간단한 형태 dialog 등등

form file -> Ui의 대한 정보를 담는 파일 입니다.

 

Kits 는 컴파일러 의 종류를 결정 하는 것입니다.

저는 64bit 로 선택하였습니다. gcc 나 clang 같은걸 추가해서 사용 할 수도 있습니다.

 

기본적인 틀이 잡힌 파일이 생성되었습니다.

 

  • .pro 라는 파일은 Qt에서 사용하고 있는 프로그램 설정 파일입니다.
  • (실직적으로 qmake 에서 컴파일, 빌드 할수있게끔 도와줍니다.)

 

main.cpp 파일을 살펴보겠습니다.

#include "hellowidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    HelloWidget w;
    w.show();
    return a.exec();
}

이코드는 이벤트 루프를 실행합니다. 코드가 실행된 뒤 바로 종료하는 것이 아닌 사용자의 입력을 기다립니다.

그다음 줄은 HelloWidget이란 class 의 인스턴스를 w라는 이름으로 생성하고 w.show() w를 화면에 보여주세요 라는 뜻입니다.

 

HellowWidget class를 살펴보겠습니다.

#ifndef HELLOWIDGET_H
#define HELLOWIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class HelloWidget; }
QT_END_NAMESPACE

class HelloWidget : public QWidget
{
    Q_OBJECT

public:
    HelloWidget(QWidget *parent = nullptr);
    ~HelloWidget();

private:
    Ui::HelloWidget *ui;
};
#endif // HELLOWIDGET_H

Qwidget을 상속 받고 있습니다.Q_OBJECT 는 QT meta Boost 컴파일러가 사용하는 키워드 들입니다.

 

namespace Ui 는 design 에서 버튼 라벨 등등을 추가하면

그 디자인을 컴파일 할때 c++ 언어로 변환해서 컴파일하게끔 합니다.

 

main.cpp 파일을 빌드 하게되면 저장된 경로에 들어가서 build-HelloWorld 안에 가시면

 

ui_hellowidget.h 헤더 파일이 있습니다. 이걸 한번 열어보면

 

/********************************************************************************
** Form generated from reading UI file 'hellowidget.ui'
**
** Created by: Qt User Interface Compiler version 5.12.9
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_HELLOWIDGET_H
#define UI_HELLOWIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_HelloWidget
{
public:

    void setupUi(QWidget *HelloWidget)
    {
        if (HelloWidget->objectName().isEmpty())
            HelloWidget->setObjectName(QString::fromUtf8("HelloWidget"));
        HelloWidget->resize(800, 600);

        retranslateUi(HelloWidget);

        QMetaObject::connectSlotsByName(HelloWidget);
    } // setupUi

    void retranslateUi(QWidget *HelloWidget)
    {
        HelloWidget->setWindowTitle(QApplication::translate("HelloWidget", "HelloWidget", nullptr));
    } // retranslateUi

};

namespace Ui {
    class HelloWidget: public Ui_HelloWidget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_HELLOWIDGET_H

컴파일러에서 컴파일 할수 있는 완벽한 형태의 c++ class가 생성된걸 볼수 있습니다.

 

728x90