Doc: Split qmldir entries table into subsections

There are two main problems with the existing table:
* The user has to scroll horizontally to view all the content in the
  right column.
* It is difficult to link to the individual entries.

Splitting the column into subsections solves these issues. In addition,
add a list of all the commands in the qmldir file to get a quick
overview of the subsections that follow.

Also, make small grammatical fixes to the text.

Fixes: QTBUG-105239
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Ic33caedf317ae1d33ecc606cffc5d664490e242c
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
Andreas Eliasson 2022-08-11 09:16:17 +02:00
parent f2c87dda91
commit 2bd4ee37ff
1 changed files with 238 additions and 229 deletions

View File

@ -19,278 +19,287 @@ module. For more information about the first form of \c qmldir file, see
\section1 Contents of a Module Definition qmldir File
A \c qmldir file is a plain-text file that contains
the following commands:
A \c qmldir file is a plain-text file that contains the following commands:
\table 70%
\header
\li Syntax
\li Usage
\row
\li
\code
module <ModuleIdentifier>
\endcode
\li Declares the module identifier of the module.
The <ModuleIdentifier> is the (dotted URI notation) identifier
for the module, which must match the module's install path.
\list
\li \l {Module Identifier Declaration}
\li \l {Object Type Declaration}
\li \l {Internal Object Type Declaration}
\li \l {JavaScript Resource Declaration}
\li \l {Plugin Declaration}
\li \l {Plugin Classname Declaration}
\li \l {Type Description File Declaration}
\li \l {Module Dependencies Declaration}
\li \l {Module Import Declaration}
\li \l {Designer Support Declaration}
\li \l {Preferred Path Declaration}
\endlist
The \l{Identified Modules#Semantics of Identified Modules}
{module identifier directive} must be the first line of the file.
Exactly one module identifier directive may exist in the \c qmldir
file.
\note Each command in a \c qmldir file must be on a separate line.
Example:
\code
module ExampleModule
\endcode
In addition to commands, you can also add comments, which are lines starting
with \c {#}.
\row
\li
\code
[singleton] <TypeName> <InitialVersion> <File>
\endcode
\li Declares a \l{qtqml-typesystem-objecttypes.html}{QML object type}
to be made available by the module.
\list
\li \c [singleton] Optional. Used to declare a singleton type.
\li \c <TypeName> is the type being made available
\li \c <InitialVersion> is the module version for which the type is to be made available
\li \c <File> is the (relative) file name of the QML file that defines the type
\endlist
\section2 Module Identifier Declaration
Zero or more object type declarations may exist in the \c qmldir
file, however each object type must have a unique type name within
any particular version of the module.
\note To declare a \c singleton type, the QML file defining the
type must include the \c {pragma Singleton} statement.
\code
module <ModuleIdentifier>
\endcode
Example:
\code
//Style.qml with custom singleton type definition
pragma Singleton
import QtQuick 2.0
Declares the module identifier of the module. The <ModuleIdentifier> is the
(dotted URI notation) identifier for the module, which must match the module's
install path.
QtObject {
property int textSize: 20
property color textColor: "green"
}
The \l{Identified Modules#Semantics of Identified Modules}
{module identifier directive} must be the first line of the file. Exactly one
module identifier directive may exist in the \c qmldir file.
// qmldir declaring the singleton type
module CustomStyles
singleton Style 1.0 Style.qml
Example:
\code
module ExampleModule
\endcode
// singleton type in use
import QtQuick 2.0
import CustomStyles 1.0
\section2 Object Type Declaration
\code
[singleton] <TypeName> <InitialVersion> <File>
\endcode
Text {
font.pixelSize: Style.textSize
color: Style.textColor
text: "Hello World"
}
\endcode
Declares a \l{qtqml-typesystem-objecttypes.html}{QML object type}
to be made available by the module.
\list
\li \c [singleton] Optional. Used to declare a singleton type.
\li \c <TypeName> is the type being made available
\li \c <InitialVersion> is the module version for which the type is to be
made available
\li \c <File> is the (relative) file name of the QML file that defines
the type
\endlist
\row
\li
\code
internal <TypeName> <File>
\endcode
\li Declares an object type that is in the module but should not be
made available to users of the module.
Zero or more object type declarations may exist in the \c qmldir
file. However, each object type must have a unique type name within
any particular version of the module.
\note To declare a \c singleton type, the QML file defining the
type must include the \c {pragma Singleton} statement.
Zero or more internal object type declarations may exist in the
\c qmldir file.
Example:
\code
//Style.qml with custom singleton type definition
pragma Singleton
import QtQuick 2.0
Example:
\code
internal MyPrivateType MyPrivateType.qml
\endcode
QtObject {
property int textSize: 20
property color textColor: "green"
}
This is necessary if the module may be imported remotely (see
\l{Identified Modules#Remotely Installed Identified Modules}
{Remotely Installed Identified Modules}) because if an exported type depends
on an non-exported type within the module, the engine must also
load the non-exported type.
// qmldir declaring the singleton type
module CustomStyles
singleton Style 1.0 Style.qml
\row
\li
\code
<ResourceIdentifier> <InitialVersion> <File>
\endcode
\li Declares a JavaScript file to be made available by the module.
The resource will be made available via the specified identifier
with the specified version number.
// singleton type in use
import QtQuick 2.0
import CustomStyles 1.0
Zero or more JavaScript resource declarations may exist in the
\c qmldir file, however each JavaScript resource must have a unique
identifier within any particular version of the module.
Text {
font.pixelSize: Style.textSize
color: Style.textColor
text: "Hello World"
}
\endcode
Example:
\code
MyScript 1.0 MyScript.js
\endcode
\section2 Internal Object Type Declaration
See the documentation about \l{qtqml-javascript-resources.html}
{defining JavaScript resources} and
\l{qtqml-javascript-imports.html}
{Importing JavaScript Resources In QML} for more information.
\code
internal <TypeName> <File>
\endcode
\row
\li
\code
[optional] plugin <Name> [<Path>]
\endcode
\li Declares a plugin to be made available by the module.
Declares an object type that is in the module but should not be
made available to users of the module.
\list
\li \c optional denotes that the plugin itself does not contain
any relevant code and only serves to load a library it links
to. If given, and if any types for the module are already
available, indicating that the library has been loaded by some
other means, QML will not load the plugin.
\li \c <Name> is the plugin library name. This is usually not the
same as the file name of the plugin binary, which is platform
dependent; e.g. the library \c MyAppTypes would produce
\c libMyAppTypes.so on Linux and \c MyAppTypes.dll on Windows.
\li \c <Path> (optional) specifies either:
\list
\li an absolute path to the directory containing the plugin
file, or
\li a relative path from the directory containing the \c qmldir
file to the directory containing the plugin file.
\endlist
Zero or more internal object type declarations may exist in the
\c qmldir file.
By default the engine searches for the plugin library in the
directory that contains the \c qmldir file. (The plugin search
path can be queried with QQmlEngine::pluginPathList() and
modified using QQmlEngine::addPluginPath().)
\endlist
Example:
\code
internal MyPrivateType MyPrivateType.qml
\endcode
Zero or more C++ plugin declarations may exist in the \c qmldir
file, however since plugin loading is a relatively expensive
operation, clients are advised to specify at most a single plugin.
This is necessary if the module is imported remotely
(see \l{Identified Modules#Remotely Installed Identified Modules}
{Remotely Installed Identified Modules}) because if an exported type depends
on a non-exported type within the module, the engine must also
load the non-exported type.
Example:
\code
plugin MyPluginLibrary
\endcode
\row
\li
\code
classname <C++ plugin class>
\endcode
\li Provides the class name of the C++ plugin used by the module.
\section2 JavaScript Resource Declaration
This information is required for all the QML modules that depend
on a C++ plugin for additional functionality. Qt Quick applications
built with static linking cannot resolve the module imports without
this information.
\code
<ResourceIdentifier> <InitialVersion> <File>
\endcode
\row
\li
\code
typeinfo <File>
\endcode
\li Declares a \l{Type Description Files}{type description file} for
the module that can be read by QML tools such as Qt Creator to
access information about the types defined by the module's plugins.
\c <File> is the (relative) file name of a \c .qmltypes file.
Declares a JavaScript file to be made available by the module.
The resource will be made available via the specified identifier
with the specified version number.
Example:
\code
typeinfo mymodule.qmltypes
\endcode
Zero or more JavaScript resource declarations may exist in the
\c qmldir file. However, each JavaScript resource must have a unique
identifier within any particular version of the module.
Without such a file, QML tools may be unable to offer features such
as code completion for the types defined in your plugins.
Example:
\code
MyScript 1.0 MyScript.js
\endcode
\row
\li
\code
depends <ModuleIdentifier> <InitialVersion>
\endcode
\li Declares that this module depends on another.
See the documentation about \l{qtqml-javascript-resources.html}
{defining JavaScript resources} and
\l{qtqml-javascript-imports.html}
{Importing JavaScript Resources In QML} for more information.
Example:
\code
depends MyOtherModule 1.0
\endcode
\section2 Plugin Declaration
This declaration is necessary only in cases when the dependency is
hidden: for example, when the C++ code for one module is used to
load QML (perhaps conditionally) which then depends on other
modules. In such cases, the \c depends declaration is necessary
to include the other modules in application packages.
\row
\li
\code
import <ModuleIdentifier> [<Version>]
\endcode
\li Declares that this module imports another.
\code
[optional] plugin <Name> [<Path>]
\endcode
Example:
\code
import MyOtherModule 1.0
\endcode
Declares a plugin to be made available by the module.
The types from the other module are made available in the same type
namespace as this module is imported into. Omitting the version
imports the latest version available of the other module, specifying
\c auto as version imports the same version as the version of this
module specified in the QML \c import statement.
\list
\li \c optional denotes that the plugin itself does not contain
any relevant code and only serves to load a library it links
to. If given, and if any types for the module are already
available, indicating that the library has been loaded by some
other means, QML will not load the plugin.
\li \c <Name> is the plugin library name. This is usually not the
same as the file name of the plugin binary, which is platform
dependent. For example, the library \c MyAppTypes would produce
\c libMyAppTypes.so on Linux and \c MyAppTypes.dll on Windows.
\li \c <Path> (optional) specifies either:
\list
\li an absolute path to the directory containing the plugin
file, or
\li a relative path from the directory containing the \c qmldir
file to the directory containing the plugin file.
\endlist
\endlist
\row
\li
\code
# <Comment>
\endcode
\li Declares a comment. These are ignored by the engine.
By default, the engine searches for the plugin library in the
directory that contains the \c qmldir file. (The plugin search
path can be queried with QQmlEngine::pluginPathList() and
modified using QQmlEngine::addPluginPath().)
Example:
\code
# this is a comment
\endcode
Zero or more C++ plugin declarations may exist in the \c qmldir
file. However, since plugin loading is a relatively expensive
operation, clients are advised to specify at most a single plugin.
\row
\li
\code
designersupported
\endcode
Example:
\code
plugin MyPluginLibrary
\endcode
\li Set this property if the plugin is supported by Qt Quick Designer.
By default, the plugin will not be supported.
\section2 Plugin Classname Declaration
A plugin that is supported by Qt Quick Designer has to be properly
tested. This means that the plugin does not crash when running inside
the qml2puppet that is used by Qt Quick Designer to execute QML.
Generally the plugin should work well in the Qt Quick Designer
and not cause any show stoppers, like taking huge amounts of memory,
slowing down the qml2puppet heavily or anything else that renders
the plugin effectively unusable in the Qt Quick Designer.
\code
classname <C++ plugin class>
\endcode
The items of an unsupported plugin are not painted in the Qt Quick Designer,
but they are still available as empty boxes and the properties can be edited.
Provides the class name of the C++ plugin used by the module.
\row
\li
\code
prefer <Path>
\endcode
This information is required for all the QML modules that depend
on a C++ plugin for additional functionality. Qt Quick applications
built with static linking cannot resolve the module imports without
this information.
\li This property directs the QML engine to load any further files for this
module from <path>, rather than the current directory. This can be used
to load files compiled with qmlcachegen.
\section2 Type Description File Declaration
For example, you can add a module's QML files as resources to a resource
path \c{:/my/path/MyModule/}. Then, add \c{prefer :/my/path/MyModule} to
the qmldir file in order to use the files in the resource system, rather
than the ones in the file system. If you then use qmlcachegen for those,
the pre-compiled files will be available to any clients of the module.
\code
typeinfo <File>
\endcode
\endtable
Declares a \l{Type Description Files}{type description file} for
the module that can be read by QML tools such as Qt Creator to
access information about the types defined by the module's plugins.
\c <File> is the (relative) file name of a \c .qmltypes file.
Each command in a \c qmldir file must be on a separate line.
Example:
\code
typeinfo mymodule.qmltypes
\endcode
Without such a file, QML tools may be unable to offer features such
as code completion for the types defined in your plugins.
\section2 Module Dependencies Declaration
\code
depends <ModuleIdentifier> <InitialVersion>
\endcode
Declares that this module depends on another.
Example:
\code
depends MyOtherModule 1.0
\endcode
This declaration is necessary only in cases when the dependency is
hidden: for example, when the C++ code for one module is used to
load QML (perhaps conditionally), which then depends on other
modules. In such cases, the \c depends declaration is necessary
to include the other modules in application packages.
\section2 Module Import Declaration
\code
import <ModuleIdentifier> [<Version>]
\endcode
Declares that this module imports another.
Example:
\code
import MyOtherModule 1.0
\endcode
The types from the other module are made available in the same type
namespace as this module is imported into. Omitting the version
imports the latest version available of the other module. Specifying
\c auto as version imports the same version as the version of this
module specified in the QML \c import statement.
\section2 Designer Support Declaration
\code
designersupported
\endcode
Set this property if the plugin is supported by Qt Quick Designer.
By default, the plugin will not be supported.
A plugin that is supported by Qt Quick Designer has to be properly
tested. This means that the plugin does not crash when running inside
the qml2puppet that is used by Qt Quick Designer to execute QML.
Generally, the plugin should work well in the Qt Quick Designer
and not cause any show stoppers, like taking excessive amounts of memory,
slowing down the qml2puppet heavily, or anything else that renders
the plugin effectively unusable in the Qt Quick Designer.
The items of an unsupported plugin are not painted in the Qt Quick Designer,
but they are still available as empty boxes and the properties can be edited.
\section2 Preferred Path Declaration
\code
prefer <Path>
\endcode
This property directs the QML engine to load any further files for this
module from <path>, rather than the current directory. This can be used
to load files compiled with qmlcachegen.
For example, you can add a module's QML files as resources to a resource
path \c{:/my/path/MyModule/}. Then, add \c{prefer :/my/path/MyModule} to
the qmldir file in order to use the files in the resource system, rather
than the ones in the file system. If you then use qmlcachegen for those,
the pre-compiled files will be available to any clients of the module.
\section1 Versioning Semantics