変更点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クラスが削除されたため、QDomDocumentQXmlStreamReader を使用して再実装されました。これにより、いくつかの動作が変更される:

  • 属性値は正規化される。例えば、<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.