데이터 입력 출력

이 페이지에서는 Qt를 사용하여 데이터를 검색하고 저장하는 다양한 방법에 대한 개요를 제공합니다.

데이터 저장 및 로드

QIODevice 클래스는 모든 파일 및 데이터 저장 장치에 대한 기본 클래스입니다. Qt Core. 데이터를 읽고 쓰는 데 사용되는 모든 클래스는 이 클래스를 상속합니다.

장치의 예로는 QFile, QBuffer, QTcpSocket, QProcess 이 있습니다. QFileQIODevice 인터페이스를 사용하여 텍스트, 바이너리 파일 및 리소스를 읽고 쓰는 데 사용됩니다. QFile 은 단독으로 사용하거나 QTextStream 또는 QDataStream 과 함께 사용하면 더 편리하게 사용할 수 있습니다.

QBuffer 클래스는 QByteArrayQIODevice 인터페이스를 제공합니다. QTcpSocket 은 개발자가 TCP 연결을 설정하고 데이터 스트림을 전송할 수 있도록 합니다. QProcess 은 외부 프로그램을 시작하고 해당 프로세스에서 읽고 쓰는 데 사용됩니다.

직렬화된 데이터

Qt API는 여러 사용 사례에 대한 데이터 직렬화를 지원합니다.

  • Qt의JSON 지원은 JSON 데이터를 구문 분석, 수정 및 저장하는 데 사용하기 쉬운 C++ API를 제공합니다.
  • QDataStream 클래스는 바이너리 데이터를 직렬화하여 QIODevice
  • Qt XML C++ Classes XML 스트리밍 및 XML용 DOM 표준의 C++ 구현을 제공합니다.

데이터베이스

모듈은 Qt SQL 모듈은 드라이버 플러그인을 사용하여 여러 데이터베이스 API와 통신합니다. Qt에는 SQLite, MySQL, DB2, Borland InterBase, Oracle, ODBC 및 PostgreSQL용 드라이버가 있습니다. Qt가 필요한 드라이버를 제공하지 않는 경우 자체 드라이버를 개발할 수도 있습니다.

Qt의 SQL 클래스는 세 가지 레이어로 나눌 수 있습니다:

레이어목적예제 클래스
  • 드라이버 레이어
  • SQL API 레이어
  • 사용자 인터페이스 계층
  • 데이터베이스와 SQL API 계층 간의 저수준 통신
  • 데이터베이스에 대한 액세스 제공
  • 데이터베이스에서 데이터 인식 위젯으로 데이터 연결

SQLite를 제외한 모든 SQL 드라이버를 사용하면 데이터베이스 시스템을 호스팅하는 서버에 연결할 수 있습니다. 내장된 MySQL 서버를 사용하는 경우 해당 데이터베이스 시스템을 사용하기 위해 MySQL 서버가 필요하지 않습니다.

SQL 데이터베이스 드라이버를 빌드하는 방법에 대한 지침은 SQL 데이터베이스 드라이버를 참조하십시오.

Qt SQLite 플러그인은 로컬 스토리지에 매우 적합합니다. SQLite는 작은(~350KiB) C 라이브러리에 포함된 관계형 데이터베이스 관리 시스템입니다. 다른 데이터베이스 관리 시스템과 달리 SQLite는 클라이언트 애플리케이션에서 액세스하는 별도의 프로세스가 아니라 애플리케이션의 필수적인 부분입니다. SQLite는 연결을 열 때 데이터베이스 이름으로 설정해야 하는 단일 파일에서 작동합니다. 파일이 존재하지 않으면 SQLite가 파일을 생성하려고 시도합니다.

SQLite에는 여러 사용자 및 여러 트랜잭션과 관련된 몇 가지 제한 사항이 있습니다. 서로 다른 트랜잭션에서 파일을 읽거나 쓰고 있는 경우 한 트랜잭션이 커밋되거나 롤백될 때까지 애플리케이션이 멈출 수 있습니다.

드라이버 부분이 설정되면 QSqlQueryModel, QSqlTableModel, QSqlRelationalTableModel 클래스를 사용하여 데이터에 액세스할 수 있습니다. QSqlTableModelQSqlRelationalTableModel 는 Qt의 항목 보기와 함께 사용할 수 있는 편집 가능한 모델을 제공합니다. QSqlTableModel 는 단일 테이블에 대한 읽기/쓰기 액세스 권한이 있는 반면 QSqlRelationalTableModel 는 메인 테이블(외래 키가 있는 테이블이 아닌)에 대한 읽기/쓰기 액세스 권한이 있습니다.

다음 페이지에는 애플리케이션에 SQL을 통합하는 방법에 대한 정보가 포함되어 있습니다:

Qt의 XML 지원

Qt는 XML 스트림을 읽고 구문 분석하고 이러한 스트림에 쓸 수 있는 API를 제공합니다. 다음의 주요 클래스는 필요한 인프라를 제공함으로써 이러한 작업을 용이하게 합니다:

  • QDomDocument 클래스는 전체 XML 문서를 문서 트리로 나타내며 문서 데이터에 대한 기본 액세스를 제공합니다.
  • QXmlStreamReader 클래스는 XML을 읽는 파서를 제공합니다. 외부 구문 분석된 엔티티를 포함하지 않는 잘 구성된 XML 1.0 구문 분석기입니다.
    • XML 네임스페이스를 이해하고 해석합니다. 예를 들어 StartElement의 경우 namespaceUri()는 요소가 있는 네임스페이스를 반환하고 name()은 요소의 로컬 이름을 반환합니다. namespaceUri()와 name()의 조합은 요소를 고유하게 식별합니다.
    • 이 함수는 전체 XML 문서 트리를 메모리에 저장하지 않으므로 CPU를 많이 사용하지 않습니다. 보고되는 시점의 현재 토큰만 저장합니다.
  • QXmlStreamWriter 클래스는 XML 작성기에 간단한 스트리밍 API를 제공합니다. 이는 XML 작성을 위한 QXmlStreamReader 에 대응하는 것으로, setDevice()로 지정된 QIODevice 에서 작동합니다.
    • 작성하려는 모든 XML 토큰이나 이벤트에 대해 전용 함수를 제공하는 간단한 API입니다.
    • 엘리먼트나 어트리뷰트를 작성할 때 지정된 namespaceUri에 따라 네임스페이스 접두사를 처리합니다. 특정 표준화된 접두사를 사용해야 하는 경우, writeNamespace() 또는 writeDefaultNamespace()를 사용하여 네임스페이스를 수동으로 선언함으로써 작성자가 해당 접두사를 사용하도록 강제할 수 있습니다.
    • 생성된 XML 데이터에 줄 바꿈과 들여쓰기를 추가하여 자동으로 서식을 지정하여 읽기 쉽게 만들 수 있습니다. 이 기능은 자동 서식 지정 속성으로 설정할 수 있습니다.

다음 항목에서는 Qt XML 지원에 대한 자세한 정보를 제공합니다:

Qt의 JSON

JSON은 읽기 쉽고 구문 분석하기 쉬운 데이터 교환을 위한 텍스트 기반 개방형 표준입니다. 객체라고 하는 간단한 데이터 구조와 연관 배열을 표현하는 데 사용됩니다. JavaScript와 관련이 있지만 언어에 독립적인 표기 형식입니다.

객체는 두 가지 형태를 취할 수 있습니다:

이름/값 쌍의 컬렉션정렬된 값 목록
{
          "last_name": "Routledge",
          "first_name": "Ronald",
          "birth_date": 1960
}
"colors": ["green", "blue", "yellow"]

로컬 스토리지

로컬 스토리지 API는 QML과 자바스크립트에서 SQL 데이터베이스의 로컬 오프라인 스토리지에 액세스할 수 있는 기능을 제공합니다.

이러한 데이터베이스는 사용자별, QML별로 다르지만 모든 QML 애플리케이션에서 액세스할 수 있습니다. 이 데이터베이스는 QDeclarativeEngine::offlineStoragePath()의 Databases 하위 디렉터리에 SQLite 데이터베이스(SQL 데이터베이스 드라이버)로 저장됩니다.

이 API는 HTML5 웹 데이터베이스 API의 동기식 API, 2009년 10월 29일 W3C 작업 초안(HTML5 웹 데이터베이스 API)을 준수합니다.

로컬 스토리지 API 사용의 기본 데모는 Qt Quick 예제 - 로컬 스토리지를 참조하세요.

QSettings 클래스

QSettings 클래스는 애플리케이션 설정의 영구 저장소를 제공합니다. 애플리케이션은 일반적으로 이전 세션의 설정을 기억합니다.

설정은 플랫폼에 따라 다르게 저장됩니다. 예를 들어 Windows에서는 레지스트리에 저장되는 반면 macOS에서는 XML 파일에 저장됩니다.

QSettings 애플리케이션 설정을 이식 가능한 방식으로 저장하고 복원할 수 있습니다. QSettings 객체를 생성하고 소멸하는 작업은 가볍고 빠릅니다. QSettings 의 개체를 만들 때는 애플리케이션 이름뿐만 아니라 조직의 이름도 지정하는 것이 좋습니다. 예를 들어

QSettings settings("MyCompany", "Accountancy");

Resources

Qt 리소스 시스템은 애플리케이션의 실행 파일에 바이너리 파일을 저장하기 위한 플랫폼 독립적인 메커니즘입니다. 애플리케이션에 특정 파일 또는 파일 세트가 자주 필요한 경우 유용합니다. 또한 특정 파일이 손실되지 않도록 보호합니다.

리소스 데이터는 바이너리로 컴파일되어 애플리케이션 코드에서 즉시 액세스하거나, 애플리케이션에서 동적으로 생성하여 리소스 시스템에 등록할 수 있습니다.

기본적으로 리소스는 애플리케이션 코드에서 소스 트리에 저장된 것과 동일한 파일 이름, :/ 접두사 또는 qrc 체계가 포함된 URL로 액세스할 수 있습니다.

연결

파일 아카이브

아카이브 파일은 일반적으로 드라이브에서 차지하는 공간을 줄이기 위해 압축된 파일 또는 디렉터리 모음입니다. 아카이브 파일의 예로는 ZIP, TAR, RAR 및 7z가 있습니다.

Qt는 zlib로 생성된 아카이브를 지원합니다( qCompress() 및 qUncompress() 참조).

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.