データの入出力

このページでは、Qtを使ってデータを取得したり保存したりする様々な方法の概要を説明します。

データの保存と読み込み

QIODevice クラスは、Qt Core のすべてのファイルやデータ保存デバイスの基本クラスです。データの読み書きに使われるクラスは、すべてこのクラスを継承しています。

デバイスの例としては、QFileQBufferQTcpSocketQProcess があります。QFile は、QIODevice インタフェースを使用して、テキスト、バイナリファイル、リソースの読み書きに使用されます。QFile は、それ自体で使用することもできますし、QTextStreamQDataStream と一緒に使用することもできます。

QBuffer クラスはQIODevice インタフェースをQByteArray に提供します。QTcpSocket を使用すると、開発者は TCP 接続を確立し、データのストリームを転送することができます。QProcess を使用すると、外部プログラムを起動し、そのプロセスからの読み取りとそのプロセスへの書き込みを行うことができます。

シリアライズされたデータ

Qt API では、いくつかのユースケースでデータのシリアライズをサポートしています。

  • Qt のJSONサポートは、JSON データを解析、変更、保存するための使いやすい C++ API を提供します。
  • QDataStream クラスへのバイナリデータのシリアライズを提供します。QIODevice
  • Qt XML C++ Classes XML Streamingおよび DOM 標準の C++ 実装を提供します。

データベース

Qt SQLモジュールは、いくつかのデータベース API と通信するためにドライバプラグインを使用します。Qt には SQLite、MySQL、DB2、Borland InterBase、Oracle、ODBC、PostgreSQL 用のドライバがあります。Qt が必要なドライバを提供していない場合、独自のドライバを開発することも可能です。

Qt の SQL クラスは 3 つのレイヤーに分けることができます:

レイヤー目的クラス例
  • ドライバ層
  • SQL API 層
  • ユーザー・インターフェース層
  • データベースとSQL APIレイヤー間の低レベル通信
  • データベースへのアクセスを提供する
  • データベースからデータ認識ウィジェットへのデータリンク

SQLite を除くすべての SQL ドライバで、データベースシステムをホストしているサーバに接続することができます。組み込み MySQL サーバを使用する場合、そのデータベースシステムを使用するために MySQL サーバは必要ありません。

SQL データベースドライバの構築方法については、SQL データベースドライバ を参照してください。

Qt SQLite プラグインはローカルストレージに非常に適しています。SQLite はリレーショナルデータベース管理システムで、小さな(~350 KiB)C ライブラリに含まれています。他のデータベース管理システムとは対照的に、SQLite はクライアントアプリケーションからアクセスされる独立したプロセスではなく、アプリケーションの不可欠な一部です。SQLiteは1つのファイルで動作し、接続を開くときにデータベース名として設定する必要があります。ファイルが存在しない場合、SQLite はそのファイルを作成しようとします。

SQLite には複数ユーザや複数トランザクションに関する制限があります。異なるトランザクションからファイルを読み書きする場合、1つのトランザクションがコミットまたはロールバックするまでアプリケーションがフリーズする可能性があります。

ドライバ部分のセットアップが完了すると、QSqlQueryModelQSqlTableModelQSqlRelationalTableModel の各クラスを使用してデータにアクセスできるようになります。QSqlTableModelQSqlRelationalTableModel は、Qt のアイテムビューで使用できる編集可能なモデルを提供します。QSqlTableModel は、1 つのテーブルへの読み取り/書き込みアクセスが可能ですが、QSqlRelationalTableModel は、メインテーブルへの読み取り/書き込みアクセスが可能です(外部キーのテーブルにはアクセスできません)。

次のページでは、アプリケーションに SQL を組み込む方法について説明します:

Qt における XML サポート

Qt は XML ストリームの読み込みと解析、そしてストリームへの書き込みを行う API を提供します。以下の主要なクラスは、必要なインフラストラクチャを提供することで、これらのアクションを容易にします:

  • QDomDocument クラスは、XML ドキュメント全体をドキュメント・ツリーとして表現し、ドキュメントのデータへの主要なアクセスを提供します。
  • QXmlStreamReader クラスはXMLを読み込むパーサーを提供します。これは整形式のXML 1.0パーサであり、外部パースされた実体を含みません。
    • XML 名前空間を理解し、解決します。例えば、StartElement の場合、namespaceUri() は要素が属するネームスペースを返し、 name() は要素のローカル名を返します。namespaceUri() と name() の組み合わせは、要素を一意に識別します。
    • XML ドキュメント・ツリー全体をメモリに保存するわけではないので、CPU負荷は高くありません。現在のトークンが報告された時点のものだけを保存します。
  • QXmlStreamWriter クラスは、シンプルなストリーミングAPIを持つXMLライターを提供します。これは、XMLを書き込むためのQXmlStreamReader と対になるもので、setDevice()で指定されたQIODevice
    • これは単純なAPIで、書き込みたいXMLトークンやイベントごとに専用の関数を提供します。
    • 要素や属性を記述する際に、指定された namespaceUri に基づいて名前空間の接頭辞を付けます。特定の標準的なプレフィックスを使用する必要がある場合は、 writeNamespace() あるいは writeDefaultNamespace() のいずれかで名前空間を手動で宣言することで、 ライターにそれらを使用させることができます。
    • 生成された XML データを自動的に整形し、改行やインデントを追加して読みやすくすることができます。この機能は、auto-formatting プロパティで有効にできます。

以下のトピックでは、Qt XML サポートについて詳しく説明します:

Qt における JSON

JSON はデータ交換のためのテキストベースのオープンスタンダードで、読み取りと解析が容易です。オブジェクトと呼ばれる単純なデータ構造や連想配列を表現するために使用されます。JavaScriptと関連していますが、言語に依存しない記法です。

オブジェクトには2つの形式がある:

名前と値のペアのコレクション値の順序付きリスト
{
          "last_name": "Routledge",
          "first_name": "Ronald",
          "birth_date": 1960
}
"colors": ["green", "blue", "yellow"]

ローカルストレージ

ローカルストレージAPIは、QMLやJavaScriptからSQLデータベースのローカルオフラインストレージにアクセスする機能を提供します。

これらのデータベースはユーザ固有、QML固有ですが、すべてのQMLアプリケーションからアクセス可能です。SQLite データベース(SQL Database Drivers)として QDeclarativeEngine::offlineStoragePath() の Databases サブディレクトリに格納されます。

この API は、HTML5 Web Database API, W3C Working Draft 29 October 2009(HTML5 Web Database API) の Synchronous API に準拠しています。

ローカルストレージ API の基本的な使い方はQt Quick Examples - Local Storageを参照してください。

QSettings クラス

QSettings クラスは、アプリケーションの設定を永続的に保存します。アプリケーションは通常、前のセッションの設定を記憶しています。

設定の保存方法はプラットフォームによって異なります。例えば、Windowsではレジストリに保存されますが、macOSではXMLファイルに保存されます。

QSettings を使用すると、ポータブルな方法でアプリケーション設定を保存および復元できます。 オブジェクトの構築と破棄は軽量かつ高速です。 のオブジェクトを作成する際には、アプリケーションの名前だけでなく、組織の名前も指定するとよいでしょう。例えばQSettings QSettings

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

リソース

Qt Resource Systemは、アプリケーションの実行ファイルにバイナリファイルを格納するための、プラットフォームに依存しないメカニズムです。これは、アプリケーションが特定のファイルやファイルセットを頻繁に必要とする場合に便利です。また、特定のファイルの紛失を防ぐこともできます。

リソース・データはバイナリにコンパイルされ、アプリケーション・コードからすぐにアクセスすることもできますし、バイナリ・リソースを動的に作成し、アプリケーションからリソース・システムに登録することもできます。

デフォルトでは、リソースはソースツリーに格納されているのと同じファイル名、:/ プレフィックス、または qrc スキームの URL でアプリケーションコードからアクセスできます。

接続性

ファイルのアーカイブ

アーカイブファイルとはファイルやディレクトリの集まりのことで、ドライブの容量を減らすために圧縮されています。アーカイブファイルの例としては、ZIP、TAR、RAR、7z などがあります。

Qt は zlib によって生成されたアーカイブをサポートしています(qCompress() と qUncompress() を参照)。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。