[Qt] Qt의 자료구조

amudomolla·2023년 7월 18일
0

Qt

목록 보기
10/11

참고 사이트


C언어의 자료구조

  • 데이터의 처리를 원활하게 하기 위해서 크게 세 가지로 자료형을 사용
    • 문자형(char), 정수형(int), 실수형(float)
  • 메모리의 낭비를 막기 위해서 크기에 따라서 다시 세부적으로 구분
    • short, int, long, float, double
  • 실행되는 플랫폼에 따라서 적용되는 데이터의 크기가 다를 수 있다.

Qt의 자료구조

  • 다양한 플랫폼에서 동일한 크기의 자료형을 제공
    • 자료형의 크기에 대해서 신경쓰지 않아도 된다.
    • 수학처리 함수 제공
      • qAbs(), qBound(), qMax(), qMin(), qRound64(), qRound()
  • Qt 자체적인 컨테이너 클래스 지원

Qt의 자료형

문자와 문자열

  • 문자 데이터 : QChar 클래스
  • 문자열 데이터 : QString 클래스
  • 국제화 지원
    • QChar 클래스 : 16비트 유니코드 지원
    • QString 클래스 : 16비트 QChar형 유니코드 지원

QString 클래스

  • 문자열을 위한 기본 클래스
    • 정수형이나 실수형으로 변환해서 사용
  • 묵시적 공유(Implicit Sharing)을 사용
    • 메모리의 사용량을 줄이고 불필요한 데이터의 복사를 피하게 해준다.
  • 기록시 복사 (Copy-on-write)
    • 8비트 문자 대신에 16비트의 문자를 사용함에 따라 발생하는 과부화 해소

데이터 스트림

  • 데이터 스트림 : 이미지나 오디오와 같은 데이터들은 연속적인 데이터의 흐름
  • 분류 : 데이터를 처리하는 단위 기준
    • 바이트 스트림 (Byte Stream)
    • 문자 스트림 (Text Stream)
  • QByteArray 클래스, QDataStream 클래스와 QTextStream 클래스

QByteArray 클래스

  • 바이트 배열 (ByteArray)로 이루어지는 자료형을 재공
    • 로우 바이트 (Null 문자가 포함된)와 8비트로 Null 문자로 끝나는 문자열을 저장
  • 'const char *'로 초기화 가능
  • QString 클래스와 같이 기본 자료형으로 변환해서 사용

QDataStream 클래스

  • 플랫폼에 사용되는 CPU, 바이트 순서 (Byte Order)나 운영체제와 관계없이 인코드된 데이터의 바이트 스트림
  • QIODevice형에 대한 바이너리 데이터 (char, short, int, char*)의 직렬화(Serialization) 지원
  • 데이터 스트림은 QIODevice 형과 밀접하게 상호 작용

QTextStream 클래스

  • 텍스트를 읽고 쓰는 용도의 인터페이스를 제공
  • 유니코드를 지원 (setCodec())
    • 사용되는 코덱 : ISO 8859-1, UTF-8 또는 UTF-16
  • QIODevice, QByteArray, QString 클래스에서 동작

QValidator 클래스

  • 입력받은 문자열을 검사할 때 사용하는 추상 클래스
  • 각각의 자료형에 따른 3개의 상속 클래스
    • QDoubleValidator와 QIntValidator 클래스 : 숫자
    • QRegExpValidator 클래스 : 정규 표현식을 이용한 문자열 검사
  • QDoubleValidator 클래스
    • 부동 소수점(Floating Point)수의 범위 검사
  • QIntValidator 클래스
    • 정수형의 숫자의 범위 검사
  • QRegExpValidator 클래스
    • 정규 표현식이 적용된 문자열을 검사
    • 입력받은 문자열을 정규 표현식의 규칙과 비교
  • QRegExp 클래스
    • 정규 표현식을 이용

정규표현식

  • 문자열의 시작은 ^ 기호로 기술
  • 문자열의 끝은 $ 기호로 기술
  • 연속되는 문자열 패턴의 묶음은 * 기호
  • 하나 이상의 문자열 패턴 묶음은 + 기호
  • 0개 혹은 하나를 의미하는 문자열 패턴의 묶음은 ? 기호로 기술

컨테이너 클래스

  • 표준 템플릿 라이브러리 (STL)
    • 자주 사용하는 자료구조나 반복적인 구조를 갖는 데이터를 위한 컨테이너
    • 검색, 정렬, 병합 등을 위한 알고리즘이 포함
  • Qt의 컨테이너 클래스
    • 다수의 데이터 객체들을 저장하는 자료구조 지원
    • QList, QLinkedList, QVector, QStack, QQueue, QSet, QMap<Key, T>, QMultiMap<Key, T>, QHash<Key, T>, QMultiHash<Key, T>

Qt의 컨테이너 클래스

  • QList : 인덱스로 접근 가능한 리스트
  • QLinkedList : 항목에 접근시, 반복자를 사용하는 리스트
  • QVector : 메모리 내의 근접한 위치에 배열
  • QStack : 단일 수치의 셋(Set)
  • QQueue : FILO(First In, Last Out) 스택
  • QSet : FILO(First In, Last Out)의 큐
  • QMap<Key, T>, QMultiMap<Key, T> : 사전(Dictionary)과 관련된 배열
  • QHash<Key, T>, QMultiHash<Key, T> : 임의의 순서로 되어 있는 데이터

QStack 클래스

  • 스택용 템를릿 클래스
  • 함수의 분기와 같은 곳에서 데이터를 저장할 때 사용
  • 값을 저장할 때는 push() 메소드를 사용, 반대로 값을 꺼내 올 때는 pop() 메소드를 사용

QQueue

  • 먼저 들어간 값이 먼저 나오고 나중에 들어가는 값이 나중에 나오는 자료구조 (FIFO)
  • QQueue 클래스는 큐(Queue)용 템플릿 클래스

시간과 날짜 관련 위젯

  • 시간과 날짜 자료형은 빈번하게 사용되지만 문화나 나라에 따라 달라서 정형화가 힘들다.
  • 시간과 날짜 데이터는 시스템으로부터 얻거나 사용자로부터 입력받는다.
    • QTime, QDate, QTimeDate 클래스를 제공
    • QTimeEdit, QDateEdit, QTimeDateEdit 위젯을 제공
    • Qt 4.2부터 달력 형태로 데이터의 입력과 표시를 쉽게 해주는 QCalendarWidget 위젯을 제공

QTime 클래스

  • 시간 처리를 위한 메소드 제공
  • 시스템 클럭(Clock)이나 사용자로부터 현재 시간 제공
  • 시간 정보를 문자열로 출력하거나 문자열로부터 시간 정보를 읽어올 때, 문자형으로 자료형을 변환

QDate 클래스

  • 날짜 처리를 위한 메소드 제공
  • 그레고리안(Gregorian) 달력 체계를 사용

QCalenderWidget

  • 날짜를 달력모양으로 쉽게 표시
  • Qt 4.2부터 추가된 위젯으로 QDateEdit 위젯에서도 함께 사용 가능
  • 위젯 위쪽에 있는 화살표 아이콘을 이용하면 월 간의 이동도 가능

MVC 구조

  • Model : 데이터와 처리 로직이 담겨있으며, View 또는 Controller와 묶이지 않기 때문에 재사용할 수 있다. (Application 로직)
  • View(UI) : 사용자 인터페이스 내의 구성요소들을 표현 (Presentation 로직)
    • Controller와 Model에 의해 생성된 결과물을 표시
  • Controller : 사용자로부터 입력을 받고, Model과 View 사이에서 데이터를 전달하는 역할 (Business Logic)

보기 관련 위젯

  • QListBox나 QListView 또는 QTable의 형식으로 항목들을 나열해서 사용자에게 보여줄 때, 사용
  • Qt 4.2부터 2D 그래픽을 위해 QGraphicsScene 클래스와 QGraphicsWidget 위젯을 제공

리스트 데이터

  • QListView 클래스
    • 리스트 모델이나 아이콘 뷰 모델을 제공하여 비구조화된 간단한 리스트나 아이콘의 모음을 모델에 저장
  • QListWidget 위젯
    • 사용자에게 리스트 형식으로 항목들을 나열하여 보여줄 때 사용

테이블 데이터

  • QTableView 클래스
    • 테이블 뷰(View)를 위한 모델을 제공
  • QTableWidget 위젯
    • 항목 기반의 표준 테이블을 제공하여 테이블(Table) 형식으로 항목들을 나열
    • 리스트의 항목들을 관리하기 위해서 QTableWidgetItem 클래스를 사용
profile
👩‍💻 기록 및 복습을 위함

0개의 댓글