I've had a look into this for you, and the short answer is that I think you may need to change to using a different parser and validator if you want DTD SYSTEM entity support.
Qt 4 has three different XML parsers:
QXmlStreamReader
- Pull parser, part of QtCore, now the recommended parserQXmlSimpleReader
- Push (event) parser, part of QtXMLQDomDocument
- DOM parser, part of QtXML
Having 3 different types of parser was decided to be too complicated, so with the move to Qt 5 the XML module has been deprecated and the recommended parser is now QXmlStreamReader. This is quite an easy parser to use (unlike QXmlSimpleReader), but has far lower memory use than QDomDocument.
Therefore, if you are writing new code in Qt for XML parsing, even if you aren't currently using Qt 5, I would strongly recommend using QXmlStreamReader.
Unfortunately for you, the manual page notes:
QXmlStreamReader is a well-formed XML 1.0 parser that does not include external parsed entities.
This means, it doesn't resolve your SYSTEM entities. Also, after inspecting the source code, it doesn't look like there are any 'hidden' hooks or methods you can use to intercept the entity resolution.
If you want to include external XML documents into another document, you may want to look at using XInclude. It would be reasonably simple to write an XInclude processor using QXmlStreamReader and QXmlStreamWriter.
Here is a basic Qt XInclude processor I wrote, it only does one level of include, but I'm sure you could extend it to support recursive inclusion reasonably easily.
Once you have a fully resolved XML document, you should be able to use the QXmlSchemaValidator to validate it.