Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
objecttypes.qdoc
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
3/*!
4\page qtqml-typesystem-objecttypes.html
5\title QML Object Types
6\brief describes QML object types and how to create them
7
8
9A QML object type is a type from which a QML object can be instantiated.
10
11In syntactic terms, a QML object type is one which can be used to declare an
12object by specifying the \e{type name} followed by a set of curly braces that
13encompasses the attributes of that object. This differs from \e {value types},
14which cannot be used in the same way. For example, \l Rectangle is a QML object
15type: it can be used to create \c Rectangle type objects. This cannot be done
16with primitive types such as \c int and \c bool, which are used to hold simple
17data types rather than objects.
18
19Custom QML object types can be defined by creating a .qml file that defines the
20type, as discussed in \l {qtqml-documents-definetypes.html}
21{Documents as QML object type definitions}, or by defining a QML type from C++
22and registering the type with the QML engine, as discussed in
23\l{qtqml-cppintegration-definetypes.html}{Defining QML Types from C++}.
24Note that in both cases, the type name must begin with an uppercase letter in
25order to be declared as a QML object type in a QML file.
26
27For more information about C++ and the different QML integration methods,
28see the
29\l {Overview - QML and C++ Integration} {C++ and QML integration overview} page.
30
31\section1 Defining Object Types from QML
32
33
34\section2 Defining Object Types Through QML Documents
35
36Plugin writers and application developers may provide types defined as QML
37documents. A QML document, when visible to the QML import system, defines a
38type identified by the name of the file minus the file extensions.
39
40Thus, if a QML document named "MyButton.qml" exists, it provides the definition
41of the "MyButton" type, which may be used in a QML application.
42
43See the documentation about \l{QML Documents} for
44information on how to define a QML document, and the syntax of the QML
45language. Once you are familiar with the QML language and how to define QML
46documents, see the documentation which explains how to
47\l{qtqml-documents-definetypes.html}
48{define and use your own reusable QML types in QML documents}.
49
50See \l {Defining Object Types through QML Documents} for more information.
51
52
53
54\section2 Defining Anonymous Types with Component
55
56Another method of creating object types from within QML is to use the \l Component type.
57This allows a type to be defined inline within a QML document, instead of using a separate
58document in a \c .qml file.
59
60\qml
61Item {
62 id: root
63 width: 500; height: 500
64
65 Component {
66 id: myComponent
67 Rectangle { width: 100; height: 100; color: "red" }
68 }
69
70 Component.onCompleted: {
71 myComponent.createObject(root)
72 myComponent.createObject(root, {"x": 200})
73 }
74}
75\endqml
76
77Here the \c myComponent object essentially defines an anonymous type that can be instantiated
78using \l {Component::createObject} to create objects of this anonymous type.
79
80
81Inline components share all
82the characteristics of regular top-level components and use the same \c import
83list as their containing QML document.
84
85
86
87Note that each \l Component object declaration creates its own \e {component scope}. Any
88\e id values used and referred to from within a \l Component object declaration must be
89unique within that scope, but do not need to be unique within the document within which the
90inline component is declared. So, the \l Rectangle declared in the \c myComponent object
91declaration could have an \e id of \c root without conflicting with the \c root declared
92for the \l Item object in the same document, as these two \e id values are declared within
93different component scopes.
94
95See \l{qtqml-documents-scope.html}{Scope and Naming Resolution} for more details.
96
97
98\section1 Defining Object Types from C++
99
100C++ plugin writers and application developers may register types defined in C++
101through API provided by the Qt QML module. There are various registration
102functions which each allow different use-cases to be fulfilled.
103For more information about those registration functions, and the specifics of
104exposing custom C++ types to QML, see the documentation regarding
105\l{qtqml-cppintegration-definetypes.html}{Defining QML Types from C++}.
106
107The QML type-system relies on imports, plugins and extensions being installed
108into a known import path. Plugins may be provided by third-party developers
109and reused by client application developers. Please see the documentation
110about \l{qtqml-modules-topic.html}{QML modules} for more information about
111how to create and deploy a QML extension module.
112
113*/