Qt - Hello world
처음 시작하는 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가 생성된걸 볼수 있습니다.