잘 알고 있겠지만 Qt는 단순한 크로스 플랫폼을 위한 GUI 프레임웍이 아니다. 크로스 플랫폼에서 개발되는 거의 모든 것을 지원하는 거대한 프레임웍과 라이브러리들의 모음이다. 따라서 그에따른 오버헤드가 따른다. 즉 이미 표준  C++에서 지원하고 있는 자료 구조들의 Qt 버전을 별도로 학습해야 한다는 것이다. 물론 표준 C++의 자료 구조를 사용해도 되지만 가급적 Qt 에서 제공하는 것을 사용하길 바란다. Qt에서 제공하는 모든 클래스들은 QObject를 상속받고 있으며 이로 인해 장점을 누릴 수 있다. 괜히 C#이나 Java가 베이스클래스를 기본적으로 가지고 있는게 아니다. 

자료 구조는 문서를 보면 굉장히 많은 함수들이 있고 매우 매우 직관적이기 때문에 특별히 길게 설명하지 않고 이런것들이 있다는 것 위주로 나열하겠지만 향후 실무에서 유용하게 사용하는 함수들에 대해서는 따로 설명하겠다.

  • QString / QStringList

QString 문자열을 조작을 포함한 기능을 제공하다. 더 좋은 것은 아래처럼 문자열의 encoding 까지도 지원한다.

QStringList는 결국 뒤에서 설명할 QList 를 이용한 QList<QString> 과 거의 유사하다. 하지만 이것에  부가적의 편의 함수들이 추가되었다.

  • QDateTime,...

MFC에 익숙하다면 CDateTime 클래스 생각하면 쉽다. Modern C++에서 chrono가 들어오면서 많이 편해지긴 했다.

패밀리 클래스로 QDate, QTime 이 있다.

흔히 많이 쓰는 날짜를 문자열로 바꾸는 함수를 사용하여 길게 표시하는 것과 짧게 표시하는 해 보았다.

  • QList / QVector / QHash / QSet / QMap / QLinkedList

모두 Qt에서 제공하는 Generic 컨테이너 클래스이다. C++standard에서 제공하는 list, vector, set, map 와 같은 역할을 수행한다. 그럼 그거 쓰지 왜 자꾸 따로 만들었냐 할 수 있겠으나 Qt의 긴 역사와 QObject를 상속받는 구조를 고려할때 납득이 가는 부분이다. 대신 힘들게 C++ 을 공부했다면 쉽게 넘어갈 수 있다. 대신 많은 추가적인 함수들을 제공하고 있으므로 너무 대충 넘기지 말고 사용할때마다 문서를 보면서 이미 있는 기능을 다시 개발하는 우를 범하지 않기를 바란다.

  • QVariant

자 드디어 못보던 것이 나왔다. 표준 C++에서는 제공하지 않는 것으로 다양한 타입의 Qt 자료 구조를 저장할 수 있다. 좀 생성자를 보면 과하다 싶을 정도로 모든 형태의 데이터 타입을 지원하고 있다. 특이한 것은 Jason과 같은 타입까지도 지원한다.

+ Recent posts