A Qt help project collects all data necessary to generate a compressed help file. Along with the actual help data, like the table of contents, index keywords and help documents, it contains some extra information like a namespace to identify the help file. One help project stands for one documentation, for example the Qt Assistant 手册 .
The file format is XML-based. For a better understanding of the format we'll discuss the following example:
<?xml version="1.0" encoding="UTF-8"?> <QtHelpProject version="1.0"> <namespace>mycompany.com.myapplication.1.0</namespace> <virtualFolder>doc</virtualFolder> <customFilter name="My Application 1.0"> <filterAttribute>myapp</filterAttribute> <filterAttribute>1.0</filterAttribute> </customFilter> <filterSection> <filterAttribute>myapp</filterAttribute> <filterAttribute>1.0</filterAttribute> <toc> <section title="My Application Manual" ref="index.html"> <section title="Chapter 1" ref="doc.html#chapter1"/> <section title="Chapter 2" ref="doc.html#chapter2"/> <section title="Chapter 3" ref="doc.html#chapter3"/> </section> </toc> <keywords> <keyword name="foo" id="MyApplication::foo" ref="doc.html#foo"/> <keyword name="bar" ref="doc.html#bar"/> <keyword id="MyApplication::foobar" ref="doc.html#foobar"/> </keywords> <files> <file>classic.css</file> <file>*.html</file> </files> </filterSection> </QtHelpProject>
To enable the QHelpEngine to retrieve the proper documentation to a given link, every documentation set has to have a unique identifier. A unique identifier makes is also possible for the help collection to keep track of a documentation set without relying on its file name. The Qt help system uses a namespace as identifier which is defined by the mandatory namespace tags. In the example above, the namespace is "mycompany.com.myapplication.1.0".
Having a namespace for every documentation naturally means that the documentation sets are quite separated. From the help engines point of view this is beneficial, but from the documentors view it is often desirable to cross reference certain topic from one manual to another without having to specify absolute links. To solve this problem, the help system introduced the concept of virtual folders.
A virtual folder will become the root directory of all files referenced in a compressed help file. When two documentations share the same virtual folder, they can use relative paths when defining hyperlinks pointing to the other documentation. If a file is contained in both documentations or manuals, the one from the current manual has precedence over the other.
... <virtualFolder>doc</virtualFolder> ...
The above example specifies 'doc' as virtual folder. If another manual, e.g. for a small helper tool for 'My Application' specifies the same folder, it is sufficient to write 'doc.html#section1' to reference the first section in the 'My Application' manual.
The virtual folder tag is mandatory and the folder must not contain any '/'.
Next in the Qt help project file are the optional definitions of custom filters. A custom filter contains a list of filter attributes which will be used later to display only the documentation which has all those attributes assigned to. So, when setting the current filter in the QHelpEngine to "My Application 1.0" only the documentation which has "myapp" and "1.0" set as filter attributes will be shown.
... <customFilter name="My Application 1.0"> <filterAttribute>myapp</filterAttribute> <filterAttribute>1.0</filterAttribute> </customFilter> ...
It is possible to define any number of custom filters in a help project file. Important to know is, that the filter attributes have not to be specified in the same project file; they can be defined in any other help file. The definition of a filter attributes takes place by specifying them in a filter section.
A filter section contains the actual documentation. One Qt help project file may contain more than one filter sections. Every filter section consists of four parts, the filter attributes section, the table of contents, the keywords and the files list. In theory all parts are optional but not specifying anything there will result in an empty documentation.
Every filter section should have filter attributes assigned to it, to enable documentation filtering. If no filter attribute is defined, the documentation will only be shown if no filtering occurs, meaning the current custom filter in the QHelpEngine does not contain any filter attributes.
... <filterSection> <filterAttribute>myapp</filterAttribute> <filterAttribute>1.0</filterAttribute> ...
In this case, the filter attributes 'myapp' and '1.0' are assigned to the filter section, i.e. all contents specified in this section will only be shown if the current custom filter has 'myapp' or '1.0' or both as filter attributes.
... <toc> <section title="My Application Manual" ref="index.html"> <section title="Chapter 1" ref="doc.html#chapter1"/> <section title="Chapter 2" ref="doc.html#chapter2"/> <section title="Chapter 3" ref="doc.html#chapter3"/> </section> </toc> ...
One section tag represents one item in the table of contents. The sections can be nested to any degree, but from a users perspective it should not be more than four or five levels. A section is defined by its title and reference. The reference, like all file references in a Qt help project, are relative to the help project file itself.
注意: The referenced files must be inside the same directory (or within a subdirectory) as the help project file. An absolute file path is not supported either.
... <keywords> <keyword name="foo" id="MyApplication::foo" ref="doc.html#foo"/> <keyword name="bar" ref="doc.html#bar"/> <keyword id="MyApplication::foobar" ref="doc.html#foobar"/> </keywords> ...
The keyword section lists all keywords of this filter section. A keyword consists basically of a name and a file reference. If the attribute 'name' is used then the keyword specified there will appear in the visible index, i.e. it will be accessible through the QHelpIndexModel . If 'id' is used, the keyword does not appear in the index and is only accessible via the linksForIdentifier() function of the QHelpEngineCore . 'name' and 'id' can be specified at the same time.
... <files> <file>classic.css</file> <file>*.html</file> </files> ...
Finally, the actual documentation files have to be listed. Make sure that all files neccessary to display the help are mentioned, i.e. stylesheets or similar files need to be there as well. The files, like all file references in a Qt help project, are relative to the help project file itself. As the example shows, files (but not directories) can also be specified as patterns using wildcards. All listed files will be compressed and written to the Qt compressed help file. So, in the end, one single Qt help file contains all documentation files along with the contents and indices.
注意: The referenced files must be inside the same directory (or within a subdirectory) as the help project file. An absolute file path is not supported either.