変更点Qt XML
Qt 6 は、フレームワークをより効率的で使いやすくするための意識的な努力の結果です。
私たちは各リリースにおいて、すべてのパブリックAPIのバイナリとソースの互換性を維持しようと努めています。しかし、Qt をより良いフレームワークにするために避けられない変更もあります。
このトピックでは、Qt XML におけるそれらの変更点を要約し、それらを扱うためのガイダンスを提供します。
XML 用シンプル API (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
Qt XML からSAXクラスが削除されたため、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
© 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.