Qt6 는 최근에 Qt5에서 업그레이드된
Qt 프레임워크 버전입니다.
Qt5 에 대한 자료는 많은데
아직 Qt6에 대한 포스팅은 거의 없는 것 같습니다.
데스트탑 뿐만 아니라 안드로이드까지
사용할 수 있는 GUI 프레임워크에
클래스의 수가 워낙 많고 성능이 좋은
C++ 이다 보니 많은 프로그래머들이
매력을 느끼고 있습니다.
워낙 평판이 좋은 프레임워크이고
커뮤니티가 잘 되어 있기 때문에
Qt6 는 지금처럼 개발자들에게
그 인기가 지속할 것이라고 생각되는데요.
QML 언어로 C++와 자바 스크립트를
통합하는 기능이 있고
4차산업 시대의 기초 언어라고 부를만한
파이썬의 경우 바인딩(binding)을 제공하여
파이썬에서 C++ QT를 사용할 수 있습니다.
Qt 로 개발하는 방법은 여러가지가 있습니다.
오픈소스이고 크로스 플랫폼이기 때문에
윈도우, 리눅스, 맥OS, 안드로이드에서도
돌아가는 프레임워크입니다.
다만 오픈소스의 특징이 그렇듯
사용이 복잡해서 입문 자체가 어려울 수가 있습니다.
복잡하다는 것은 통합개발환경의 선택이나
버전 관리를 직접해야 하므로
초기설정에 시간이 많이 들어갑니다.
IDE는 비주얼 스튜디오 코드, 비주얼 스튜디오,
QT Creator 등 다양한 옵션이 있습니다만
아무래도 디자인 기능이 통합되있는
Qt Creator 가 많이 쓰입니다.
비주얼 베이직을 다루는 것 처럼
마우스로 GUI를 설계할 수 있다는 부분이 장점입니다.
디자이너와의 소통도 원활하겠죠.
Java Fx 와 Qt의 비교도 종종 이루어지는데요.
기능이나 성능상의 장점으로는 Qt가 좋겠지만
Java Fx는 훨씬 사용하기가 쉽고
일단 Java 와 C++을 비교하면
C++이 더 어렵겠죠.
Qt는 상업 라이센스가 비싸다는 단점도 있습니다.
오픈소스가 라이센스가 비싸다는 것은
좀 많이 단점이 될 수 있죠.
상업용은 연간 1000달러 정도로 비싸지만
개인용과 LGPL은 무료입니다.
둘다 xml 스타일의 mark up language를 지원합니다.
(데스크탑과 웹 interface가 점점 접점을 찾아가는 듯)
둘다 각자의 철학이 있기 때문에
어느 한쪽이 우월하다고 말하기는
좀 거시기합니다.
오픈 소스 커뮤니티에서 좀 논쟁거리이긴 합니다.
이런 경우 tradeoff 가 있으니까
장단점을 잘 비교해보고 선택하는 것이 좋습니다.
프레임워크가 좋아서 언어를 선택할 수도
있겠지만, 그건 또 모르는 이야기가 되겠네요.
자바 전문가가 갑자기 C++로 전향하기는
어려운 일이니까요.
어쨋든 프로그래머는 프로젝트를 시작할때
연장을 선택해야 하므로 충분히 고려하고
결정하는 것이 좋을 것 입니다.
이번 포스팅에서는 Qt Creator를 사용해서
Hello World 를 만들어 보겠습니다.
C++ 을 배울 때 콘솔에서 iostream
라이브러리의 cout 객체를 사용하는데
Qt Creator 는 Qt를 위한 개발환경이므로
별도의 콘솔 입출력 라이브러리가 있습니다.
다음 예제에서 QTextStream을 사용해서 콘솔에 출력해보겠습니다.
Qt Creator 에서 New File or Project를 선택합니다.
아래 화면에서 Qt Console Application 을 선택합니다.
다음에 나오는 화면에서는 next를 계속 클릭합니다.
kit selection 에서는 Desktop 을 선택합니다.
이것들은 Maintain Qt 툴에서 버전별로
다운받을 수 있습니다.
여기서는 msvc2019(마이크로 소프트 컴파일러)
64비트를 사용했는데 다른 버전의 다른
컴파일러도 상관없습니다.
다만 호환성 차이는 스스로 체크해봐야 할 겁니다.
프로젝트가 생성되면 다른 것들은 삭제하고
QTextStream을 사용해봅니다.
stdout (표준 출력) 을 Qt 전용 텍스트 스트림으로
사용 방법은 cout 과 비슷하게 사용할 수 있습니다.
여기서 QString 은 C++의 내장 객체(급)인
string 과 흡사한 메소드를 가지고 있습니다.
자세한 사항은 Qt 공식 레퍼런스를 참고하도록 합니다.
#include <QTextStream>
int main(int argc, char *argv[])
{
QTextStream qout(stdout);
QString myString {"Hello"};
myString.append(" World!");
myString.append(" Qt6");
qout << myString << "\n";
qout << myString.toUpper() << "\n";
qout << myString.toLower() << "\n";
return 0;
}
[실행결과]
Hello World! Qt6
HELLO WORLD! QT6
hello world! qt6
빌드 후 실행하면 QtCreator에서도 콘솔 출력을
확인할 수 있습니다.
Qt 라이브러리는 QDebug에서 콘솔 출력을 지원합니다.
GUI를 테스트하면서 변수 등을
확인하기 위해 사용할 수 있습니다.
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qDebug() << "Hello World ";
return a.exec();
}
프로젝트에서 위젯 응용프로그램을
만들어서 QLable로 Hello World 창을
만들 수도 있습니다.
(QLabel은 라벨입니다)
특이한 점은 레이블에 출력할 문자열에
Html 처럼 마크업 언어를 사용할 수 있습니다.
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel *label = new QLabel("<font color=green>Hello <b>Qt6!</b></font>", 0);
label->show();
return a.exec();
}
출력된 창을 보면 Label 도 결국
하나의 윈도우임을 알 수 있습니다.
레이블이 위젯이고 위젯은
윈도우 창이다... 정도로
이해하면 처음에는 충분합니다.
윈도우 창이란 무엇이냐까지
들어가면 무한 루프를 돌면서
마우스나 키보드의 입력을
대기하며 이벤트 발생시
대응하는 액션을 실행하는 것이
윈도우 창이다;;; 라고도 할 수 있습니다.
윈도우 GUI 프로그래밍에서
중요한 것은 무한루프의 개념입니다.
위의 Qt 코드에서는 a.exec()가
호출된 후 무한루프를 돌고 있음을 알 수 있습니다.
무한루프를 끝내는 것은
사용자의 입력이죠.(닫기 버튼을 누른다거나)
QT6 설치하기 C++ GUI 프레임워크 - VISUAL STUDIO - 윈도우10
QTextStream Class | Qt Core 5.15.5