[Qt] Container Class – 1. QList

STL Container Class와 같이 Qt에서도 Container Class를 제공해줍니다. 이번 글에서는 자주 사용되는 Container Class에 종류를 알아 보고 대표적으로 QList사용법에 대해 알아보겠습니다.

자주 사용되는 Qt Container Class 목록은 아래와 같습니다.

  • QList(QVector) : 데이터를 배열과 같이 저장하는 컨테이너 클래스. Qt 6부터 QVector와 통합됨(관련 글)
  • QQueue : FIFO 구조의 클래스
  • QStack : FILO 구조의 클래스
  • QMap : Key와 Value가 쌍을 이루는 클래스. Value를 Key 순서대로 저장.
  • QMultiMap : 하나의 Key과 여러 개의 Value와 연관이 되는 클래스.
  • QHash : QMap과 거의 동일하지만 더 빠름. 데이터를 임의의 순서로 저장.

QList 선언

QList 클래스 변수 사용 시 아래 예시처럼 T에 타입을 입력하면 됩니다.

QList<int> listInt; // int형 리스트
QList<QString> listString; // QString형 리스트

QList 삽입

QList에 삽입 하려면 아래와 같이 코딩해줍니다.

// 삽입
qDebug() << "===============================";
listString << "hello" << "hi"; // operator<< 삽입
qDebug() << listString;

listString.insert(1, "world"); // Index 위치에 삽입
qDebug() << listString;

listString.prepend("Qt"); // 맨 앞에 삽입
qDebug() << listString;

listString.append("programmer"); // 맨 뒤에 삽입
qDebug() << listString;

실행하면 아래와 같이 출력합니다.

QList 값 얻기

QList에 값을 얻기 위해서는 at 함수를 사용합니다.

qDebug() << "===============================";
for (qsizetype i = 0 ; i < listString.size() ; i++)
{
    QString str = listString.at(i);
    qDebug() << "index: " << i << ", String: " << str;
}

qsizetype은 간단히 설명하면 Qt에서 제공하는 사이즈를 위한 특별한 정수형 타입입니다.
위 코드를 실행하면 아래와 같이 출력합니다.

QList 삭제

QList에 삭제를 하려면 아래와 같이 remove로 되어있는 함수들을 사용하면 됩니다.

// 삭제
qDebug() << "===============================";
listString.remove(1); // Index 위치 삭제
qDebug() << listString;

listString.removeFirst(); // 맨 앞에 삭제
qDebug() << listString;

listString.removeLast(); // 맨 뒤에 삭제
qDebug() << listString;

listString.clear(); // 모두 삭제
qDebug() << listString;

위 코드를 실행하면 아래와 같이 출력합니다.

이상으로 컨테이너 클래스에 대해 간단히 알아보았습니다.