Qt XML の変更点
Qt 6 は、フレームワークをより効率的で使いやすくするための意識的な努力の結果です。
私たちは各リリースにおいて、すべての公開APIのバイナリとソースの互換性を維持しようと努めています。しかし、Qt をより良いフレームワークにするために避けられない変更もあります。
このトピックでは、Qt XMLにおけるそれらの変更点を要約し、それらを扱うためのガイダンスを提供します。
Simple API for XML (SAX) パーサー
すべてのSAXクラスは Qt XML から削除されました。XML ファイルの読み込みにはQXmlStreamReader を使用してください。ここでは、現在のコードをQXmlStreamReader に移植するための簡単な手順を説明します:
例えば
QFile *file = new QFile(...); QXmlInputSource *source = new QXmlInputSource(file); Handler *handler = new Handler; QXmlSimpleReader xmlReader; xmlReader.setErrorHandler(handler); xmlReader.setContentHandler(handler); if (xmlReader.parse(source)) { ... // do processing } else { ... // do error handling }
のようなコードがあれば
QFile file = ...; QXmlStreamReader reader(&file); while (!reader.atEnd()) { reader.readNext(); ... // do processing } if (reader.hasError()) { ... // do error handling }
QDom と QDomDocument
SAXクラスが Qt XML から削除されたため、QDomDocument はQXmlStreamReader を使って再実装されました。これにより、いくつかの動作が変更されます:
- 属性値は正規化されます。例えば、
<tag attr=" a \n b " />
は<tag attr="a b"/>
と同等です。 - 同一の修飾属性名は許されなくなりました。つまり、要素の属性は一意な名前を持たなければなりません。
- 宣言されていない名前空間接頭辞は許されなくなりました。
QDomDocument を使用し、これらのいずれかに依存している場合は、それに応じてコードと XML 文書を更新する必要があります。
スペーシングのみのテキスト・ノード
デフォルトでは、スペース文字のみを含むテキスト・ノードは取り除かれ、QDomDocument に表示されません。この動作を変更する Qt 5 の方法は、QXmlReader
を指定できるQDomDocument::setContent() オーバーロードを使用することでした。このオーバーロードはQt 6.0で削除されましたが、Qt 6.5以降、QDomDocument::ParseOption::PreserveSpacingOnlyNodes をパースオプションとして渡すことで、スペーシングのみのテキストノードを保持するように指定できます。
Qt Core5 互換ライブラリ
あなたのアプリケーションやライブラリが今すぐ移植できない場合、QXmlSimpleReader と関連するクラスが Qt5Compat に存在し、古いコードベースの動作を維持します。これらの SAX クラスをさらに使用したい場合は、新しい Qt5Compat モジュールに対してリンクし、qmake .pro
ファイルにこの行を追加する必要があります:
QT += core5compat
アプリケーションやライブラリをすでにcmakeビルドシステムに移植している場合は、次の行をCMakeList.txt
に追加してください:
PUBLIC_LIBRARIES Qt::Core5Compat
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。