// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
\page qml-glossary.html
\title Glossary Of QML Terms
\brief Glossary of terms used in the documentation for QML and Qt Quick

\section1 Common Terms

\table
    \header
        \li Term
        \li Definition

    \row
        \li QML
        \li The language in which QML applications are written. The language
            architecture and engine are implemented by the Qt Qml module.

    \row
        \li Qt Quick
        \li The standard library of types and functionality for the
            QML language, which is provided by the Qt Quick module,
            and may be accessed with "import QtQuick".

    \row
        \li Type
        \li In QML, a \e type may refer to either a
            \l{qtqml-typesystem-topic.html}{Value Type} or a
            \l{qtqml-typesystem-topic.html#qml-object-types}{QML Object Type}.

            The QML language provides a number of built-in
            \l{qtqml-typesystem-valuetypes.html}{value types}, and the
            Qt Quick module provides various \l {Qt Quick QML Types}{Qt Quick types}
            for building QML applications. Types can also be provided by
            third-party developers through (\l{qtqml-modules-topic.html}{modules}) or by the application
            developer in the application itself through \l{qtqml-documents-definetypes.html}{QML Documents}.

            See \l{qtqml-typesystem-topic.html}{The QML Type System}
            for more details.

    \row
        \li Value Type
        \li A \l{qtqml-typesystem-topic.html}{value type} is a simple type
            such as \c int, \c string and \c bool. Unlike
            \l{qtqml-typesystem-topic.html#qml-object-types}{object types},
            an object cannot be instantiated from a value type; for example,
            it is not possible to create an \c int object with properties,
            methods, signals and so on.

            Value types as well as object types usually belong to a
            \l{qtqml-modules-topic.html}{QML module}. You have to import the
            module to use them. Some types are built into the language, for
            example int, bool, double, string, but also QtObject and Component.

            See \l{qtqml-typesystem-topic.html}{The QML Type System}
            for more details.

    \row
        \li Object Type
        \li A \l{qtqml-typesystem-topic.html#qml-object-types}{QML Object Type}
            is a type that can be instantiated by the QML engine.

            A QML type can be defined either by a document in a .qml file
            beginning with a capital letter, or by a QObject-based C++ class.

            See \l{qtqml-typesystem-topic.html}{The QML Type System}
            for more details.

    \row
        \li Object
        \li A QML object is an instance of a
            \l{qtqml-typesystem-topic.html#qml-object-types}{QML Object Type}.

            Such objects are created by the engine when it processes
            \l{qtqml-syntax-basics.html#object-declarations}{object declarations},
            which specify the objects to be created and the attributes that are to
            be defined for each object.

            Additionally, objects can be dynamically created at runtime through
            Component.createObject() and Qt.createQmlObject().

            See also \l{#lazy-instantiation}{Lazy Instantiation}.

    \row
        \li Component
        \li A component is a template from which a QML object or object
            tree is created. It is produced when a document is loaded by
            the QML engine. Once it has been loaded, it can be used to
            instantiate the object or object tree that it represents.

            Additionally, the \l Component type is a special type that can
            can be used to declare a component inline within a document.
            Component objects can also be dynamically created through
            Qt.createComponent() to dynamically create QML objects.

    \row
        \li Document
        \li A \l{qtqml-documents-topic.html}{QML Document} is a self
            contained piece of QML source code that begins with one or more
            import statements and contains a single top-level object
            declaration. A document may reside in a .qml file or a text string.

            If it is placed in a .qml file whose name begins with a capital
            letter, the file is recognized by the engine as a definition of
            a QML type. The top-level object declaration encapsulates the
            object tree that will be instantiated by the type.

    \row
        \li Property
        \li A property is an attribute of an object type that has a name and
            an associated value; this value can be read (and in most cases, also
            written to) externally.

            An object can have one or more properties.  Some properties
            are associated with the canvas (e.g., x, y, width, height,
            and opacity) while others may be data specific to that type
            (e.g., the "text" property of the \l Text type).

            See \l{qtqml-syntax-objectattributes.html}{QML Object Attributes}
            for more details.

    \row
        \li Binding
        \li A binding is a JavaScript expression which is "bound" to a
            property.  The value of the property at any point in time
            will be the value returned by evaluating that expression.

            See \l{qtqml-syntax-propertybinding.html}{Property Binding}
            for more details.

    \row
        \li Signal
        \li A signal is a notification from a QML object. When an object emits
            a signal, other objects can receive and process this signal through
            a \l{Signal Attributes}{signal handler}.

            Most properties of QML objects
            have a change signal, and also an associated change signal handler
            which may be defined by clients to implement functionality.  For
            example, the "onClicked()" handler of an instance of the MouseArea
            type might be defined in an application to cause a sound to be
            played.

            See \l{qtqml-syntax-signals.html}{Signal and Handler Event System}
            for more details.

    \row
        \li Signal Handler
        \li A signal handler is the expression (or function) which is triggered
            by a signal.  It is also known as a "slot" in C++.

            See \l{qtqml-syntax-signals.html}{Signal and Handler Event System}
            for more details.

    \row
        \li Lazy Instantiation \target lazy-instantiation
        \li Object instances can be instantiated "lazily" at run-time,
            to avoid performing unnecessary work until needed.  Qt Quick
            provides the \l Loader type to make lazy instantiation more
            convenient.
\endtable
*/
