From bbc247f839ab0b186a60cff96e06be4f30f66811 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 23 Apr 2010 09:45:37 +1000 Subject: compile --- src/imports/gestures/plugin.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/imports/gestures/plugin.cpp b/src/imports/gestures/plugin.cpp index 9f5d923..b8a9751 100644 --- a/src/imports/gestures/plugin.cpp +++ b/src/imports/gestures/plugin.cpp @@ -53,8 +53,7 @@ public: virtual void registerTypes(const char *uri) { Q_ASSERT(QLatin1String(uri) == QLatin1String("Qt.labs.gestures")); - qmlRegisterCustomType(uri,1,0, "GestureArea", "QDeclarativeGestureArea", - new QDeclarativeGestureAreaParser); + qmlRegisterCustomType(uri,1,0, "GestureArea", new QDeclarativeGestureAreaParser); } }; -- cgit v0.12 From c8359ce7b9ec72c100d8b46f8ac86ec6e8fbed02 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 23 Apr 2010 13:52:24 +1000 Subject: Collection of small doc improvements --- doc/src/declarative/animation.qdoc | 2 +- doc/src/declarative/javascriptblocks.qdoc | 3 +++ doc/src/declarative/network.qdoc | 11 ++++++----- doc/src/declarative/qdeclarativedocument.qdoc | 2 +- doc/src/declarative/qdeclarativeintro.qdoc | 4 ++-- doc/src/declarative/qdeclarativestates.qdoc | 2 +- doc/src/declarative/qtprogrammers.qdoc | 4 ++-- .../declarative/snippets/qtbinding/contextproperties/main.cpp | 2 +- doc/src/declarative/snippets/qtbinding/custompalette/main.cpp | 2 +- doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp | 2 +- 10 files changed, 19 insertions(+), 15 deletions(-) diff --git a/doc/src/declarative/animation.qdoc b/doc/src/declarative/animation.qdoc index 9969e8f..88aca1b 100644 --- a/doc/src/declarative/animation.qdoc +++ b/doc/src/declarative/animation.qdoc @@ -94,7 +94,7 @@ Rectangle { Rectangle { color: "red" width: 50; height: 50 - NumberAnimation on x { to: 50; } + NumberAnimation on x { to: 50 } } } \endqml diff --git a/doc/src/declarative/javascriptblocks.qdoc b/doc/src/declarative/javascriptblocks.qdoc index 7c0570e..d9a2ba5 100644 --- a/doc/src/declarative/javascriptblocks.qdoc +++ b/doc/src/declarative/javascriptblocks.qdoc @@ -184,6 +184,9 @@ Any element in a QML file - including nested elements and nested QML component instances - can use this attached property. If there is more than one \c onCompleted() handler to execute at startup, they are run sequentially in an undefined order. +Likewise, the \l {Component::onDestruction} attached property is triggered on +component destruction. + \section1 QML JavaScript Restrictions QML executes standard JavaScript code, with the following restrictions: diff --git a/doc/src/declarative/network.qdoc b/doc/src/declarative/network.qdoc index d268a13..68768c6 100644 --- a/doc/src/declarative/network.qdoc +++ b/doc/src/declarative/network.qdoc @@ -130,11 +130,12 @@ See the \tt demos/declarative/flickr for a real demonstration of this. \section1 Configuring the Network Access Manager All network access from QML is managed by a QNetworkAccessManager set on the QDeclarativeEngine which executes the QML. -By default, this is an unmodified Qt QNetworkAccessManager. You may set a different manager using -QDeclarativeEngine::setNetworkAccessManager() as appropriate for the policies of your application. -For example, the \l {Qt Declarative UI Runtime}{qml} tool sets a new QNetworkAccessManager which -trusts HTTP Expiry headers to avoid network cache checks, allows HTTP Pipelining, adds a persistent HTTP CookieJar, -a simple disk cache, and supports proxy settings. +By default, this is an unmodified Qt QNetworkAccessManager. You may set a different manager by +providing a QDeclarativeNetworkAccessManagerFactory and setting it via +QDeclarativeEngine::setNetworkAccessManagerFactory(). +For example, the \l {Qt Declarative UI Runtime}{qml} tool sets a QDeclarativeNetworkAccessManagerFactory which +creates QNetworkAccessManager that trusts HTTP Expiry headers to avoid network cache checks, +allows HTTP Pipelining, adds a persistent HTTP CookieJar, a simple disk cache, and supports proxy settings. \section1 QRC Resources diff --git a/doc/src/declarative/qdeclarativedocument.qdoc b/doc/src/declarative/qdeclarativedocument.qdoc index cf3aae2..bc099ce 100644 --- a/doc/src/declarative/qdeclarativedocument.qdoc +++ b/doc/src/declarative/qdeclarativedocument.qdoc @@ -93,7 +93,7 @@ behaviour. As it is a template, a single QML component can be "run" multiple ti produce several objects, each of which are said to be \e instances of the component. Once created, instances are not dependent on the component that created them, so they can -operate on independent data. Here is an example of a simple "button" component that is +operate on independent data. Here is an example of a simple "Button" component that is instantiated four times, each with a different value for its \c text property. \table diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc index 4d05a8c..a98c9e1 100644 --- a/doc/src/declarative/qdeclarativeintro.qdoc +++ b/doc/src/declarative/qdeclarativeintro.qdoc @@ -142,8 +142,8 @@ Commenting in QML is similar to JavaScript. \quotefile doc/src/snippets/declarative/comments.qml -Comments are ignored by the engine. The are useful for explaining what you -are doing: for referring back to at a later date, or for others reading +Comments are ignored by the engine. They are useful for explaining what you +are doing; for referring back to at a later date, or for others reading your QML files. Comments can also be used to prevent the execution of code, which is diff --git a/doc/src/declarative/qdeclarativestates.qdoc b/doc/src/declarative/qdeclarativestates.qdoc index 0fea6f8..fd0c677 100644 --- a/doc/src/declarative/qdeclarativestates.qdoc +++ b/doc/src/declarative/qdeclarativestates.qdoc @@ -70,7 +70,7 @@ In QML: \o A state can affect the properties of other objects, not just the object owning the state (and not just that object's children). \endlist -Here is an example of using states. In the default state \c myRect is positioned at 0,0. In the 'moved' state it is positioned at 50,50. Clicking within the mouse region changes the state from the default state to the 'moved' state, thus moving the rectangle. +Here is an example of using states. In the default state \c myRect is positioned at 0,0. In the 'moved' state it is positioned at 50,50. Clicking within the mouse area changes the state from the default state to the 'moved' state, thus moving the rectangle. \qml Item { diff --git a/doc/src/declarative/qtprogrammers.qdoc b/doc/src/declarative/qtprogrammers.qdoc index 05ffeb0..0b40840 100644 --- a/doc/src/declarative/qtprogrammers.qdoc +++ b/doc/src/declarative/qtprogrammers.qdoc @@ -62,7 +62,7 @@ QML provides direct access to the following concepts from Qt: \o QObject signals and slots - available as functions to call in JavaScript \o QObject properties - available as variables in JavaScript \o QWidget - QDeclarativeView is a QML-displaying widget - \o Qt models - used directly in data binding (QAbstractItemModel and next generation QListModelInterface) + \o Qt models - used directly in data binding (QAbstractItemModel) \endlist Qt knowledge is \e required for \l {Extending QML in C++}, and also for \l{Integrating QML with existing Qt UI code}. @@ -104,7 +104,7 @@ and exactly how it respond to mouse, key, or touch input, should all be left for in QML. It is illustrative to note that QDeclarativeTextEdit is built upon QTextControl, -QDeclarativeWebView is built upon QWebPage, and ListView uses QListModelInterface, +QDeclarativeWebView is built upon QWebPage, and ListView uses QAbstractItemModel, just as QTextEdit, QWebView, and QListView are built upon those same UI-agnostic components. diff --git a/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp b/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp index 15e3d4c..4073a6c 100644 --- a/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp +++ b/doc/src/declarative/snippets/qtbinding/contextproperties/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) context->setContextProperty("backgroundColor", QColor(Qt::yellow)); - view.setSource(QUrl("main.qml")); + view.setSource(QUrl::fromLocalFile("main.qml")); view.show(); return app.exec(); diff --git a/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp b/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp index c723688..dc651f6 100644 --- a/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp +++ b/doc/src/declarative/snippets/qtbinding/custompalette/main.cpp @@ -53,7 +53,7 @@ int main(int argc, char *argv[]) QDeclarativeView view; view.rootContext()->setContextProperty("palette", new CustomPalette); - view.setSource(QUrl("main.qml")); + view.setSource(QUrl::fromLocalFile("main.qml")); view.show(); return app.exec(); diff --git a/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp b/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp index 13e3b9f..537a288 100644 --- a/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp +++ b/doc/src/declarative/snippets/qtbinding/stopwatch/main.cpp @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) view.rootContext()->setContextProperty("stopwatch", new Stopwatch); - view.setSource(QUrl("main.qml")); + view.setSource(QUrl::fromLocalFile("main.qml")); view.show(); return app.exec(); -- cgit v0.12 From 9a11e0288869cdf53350a95bedf28374c8fccb31 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 23 Apr 2010 11:32:11 +1000 Subject: Basic Component doc. --- src/declarative/qml/qdeclarativecomponent.cpp | 75 ++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 3899e73..24edf7d 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -152,7 +152,7 @@ int statusId = qRegisterMetaType("QDeclarativeCom \value Null This QDeclarativeComponent has no data. Call loadUrl() or setData() to add QML content. \value Ready This QDeclarativeComponent is ready and create() may be called. \value Loading This QDeclarativeComponent is loading network data. - \value Error An error has occured. Calling errorDescription() to retrieve a description. + \value Error An error has occured. Call errors() to retrieve a list of \{QDeclarativeError}{errors}. */ void QDeclarativeComponentPrivate::typeDataReady() @@ -237,6 +237,18 @@ QDeclarativeComponent::~QDeclarativeComponent() } /*! + \qmlproperty enumeration Component::status + This property holds the status of component loading. It can be one of: + \list + \o Null - no data is available for the component + \o Ready - the component has been loaded, and can be used to create instances. + \o Loading - the component is currently being loaded + \o Error - an error occurred while loading the component. + Calling errorsString() will provide a human-readable description of any errors. + \endlist + */ + +/*! \property QDeclarativeComponent::status The component's current \l{QDeclarativeComponent::Status} {status}. */ @@ -255,6 +267,14 @@ QDeclarativeComponent::Status QDeclarativeComponent::status() const } /*! + \qmlproperty bool Component::isNull + + Is true if the component is in the Null state, false otherwise. + + Equivalent to status == Component.Null. +*/ + +/*! \property QDeclarativeComponent::isNull Is true if the component is in the Null state, false otherwise. @@ -267,6 +287,14 @@ bool QDeclarativeComponent::isNull() const } /*! + \qmlproperty bool Component::isReady + + Is true if the component is in the Ready state, false otherwise. + + Equivalent to status == Component.Ready. +*/ + +/*! \property QDeclarativeComponent::isReady Is true if the component is in the Ready state, false otherwise. @@ -279,6 +307,16 @@ bool QDeclarativeComponent::isReady() const } /*! + \qmlproperty bool Component::isError + + Is true if the component is in the Error state, false otherwise. + + Equivalent to status == Component.Error. + + Calling errorsString() will provide a human-readable description of any errors. +*/ + +/*! \property QDeclarativeComponent::isError Is true if the component is in the Error state, false otherwise. @@ -291,6 +329,14 @@ bool QDeclarativeComponent::isError() const } /*! + \qmlproperty bool Component::isLoading + + Is true if the component is in the Loading state, false otherwise. + + Equivalent to status == Component::Loading. +*/ + +/*! \property QDeclarativeComponent::isLoading Is true if the component is in the Loading state, false otherwise. @@ -303,6 +349,12 @@ bool QDeclarativeComponent::isLoading() const } /*! + \qmlproperty real Component::progress + The progress of loading the component, from 0.0 (nothing loaded) + to 1.0 (finished). +*/ + +/*! \property QDeclarativeComponent::progress The progress of loading the component, from 0.0 (nothing loaded) to 1.0 (finished). @@ -488,6 +540,17 @@ QList QDeclarativeComponent::errors() const } /*! + \qmlmethod string Component::errorsString() + + Returns a human-readable description of any errors. + + The string includes the file, location, and description of each error. + If multiple errors are present they are separated by a newline character. + + If no errors are present, an empty string is returned. +*/ + +/*! \internal errorsString is only meant as a way to get the errors in script */ @@ -506,6 +569,11 @@ QString QDeclarativeComponent::errorsString() const } /*! + \qmlproperty url Component::url + The component URL. This is the URL that was used to construct the component. +*/ + +/*! \property QDeclarativeComponent::url The component URL. This is the URL passed to either the constructor, or the loadUrl() or setData() methods. @@ -525,6 +593,11 @@ QDeclarativeComponent::QDeclarativeComponent(QDeclarativeComponentPrivate &dd, Q } /*! + \qmlmethod object Component::createObject() + Returns an object instance from this component. +*/ + +/*! \internal A version of create which returns a scriptObject, for use in script */ -- cgit v0.12 From 5ef92c54cd35e6b2abf5f4b0db02c8980c48119d Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 23 Apr 2010 12:15:13 +1000 Subject: Return null if creation fails. --- doc/src/declarative/globalobject.qdoc | 4 ++-- src/declarative/qml/qdeclarativecomponent.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc index 6709ab4..57eaae7 100644 --- a/doc/src/declarative/globalobject.qdoc +++ b/doc/src/declarative/globalobject.qdoc @@ -223,7 +223,7 @@ of their use. function finishCreation(){ if(component.isReady()){ sprite = component.createObject(); - if(sprite == 0){ + if(sprite == null){ // Error Handling }else{ sprite.parent = page; @@ -248,7 +248,7 @@ of their use. \code component = createComponent("Sprite.qml"); sprite = component.createObject(); - if(sprite == 0){ + if(sprite == null){ // Error Handling console.log(component.errorsString()); }else{ diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 24edf7d..161ce56 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -594,7 +594,9 @@ QDeclarativeComponent::QDeclarativeComponent(QDeclarativeComponentPrivate &dd, Q /*! \qmlmethod object Component::createObject() - Returns an object instance from this component. + Returns an object instance from this component, or null if object creation fails. + + The object will be created in the same context as the component was created in. */ /*! @@ -606,10 +608,10 @@ QScriptValue QDeclarativeComponent::createObject() Q_D(QDeclarativeComponent); QDeclarativeContext* ctxt = creationContext(); if(!ctxt) - return QScriptValue(); + return QScriptValue(QScriptValue::NullValue); QObject* ret = create(ctxt); if (!ret) - return QScriptValue(); + return QScriptValue(QScriptValue::NullValue); QDeclarativeEnginePrivate *priv = QDeclarativeEnginePrivate::get(d->engine); QDeclarativeData::get(ret, true)->setImplicitDestructible(); return priv->objectClass->newQObject(ret, QMetaType::QObjectStar); -- cgit v0.12 From 43559e16f30d9c6eb932d4f571ec6d749b1221d5 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 23 Apr 2010 14:53:43 +1000 Subject: Doc fixes. --- doc/src/declarative/anchor-layout.qdoc | 8 ++++++- doc/src/declarative/elements.qdoc | 1 + doc/src/declarative/extending.qdoc | 39 +++++++++++++++++-------------- doc/src/declarative/integrating.qdoc | 4 ++-- doc/src/declarative/qdeclarativei18n.qdoc | 2 +- doc/src/declarative/qmlruntime.qdoc | 16 ++++++------- 6 files changed, 40 insertions(+), 30 deletions(-) diff --git a/doc/src/declarative/anchor-layout.qdoc b/doc/src/declarative/anchor-layout.qdoc index ff47694..5340de6 100644 --- a/doc/src/declarative/anchor-layout.qdoc +++ b/doc/src/declarative/anchor-layout.qdoc @@ -44,10 +44,16 @@ \target anchor-layout \title Anchor-based Layout in QML -In addition to the more traditional \l Grid, \l Row, and \l Column, QML also provides a way to layout items using the concept of \e anchors. Each item can be thought of as having a set of 6 invisible "anchor lines": \e left, \e horizontalCenter, \e right, \e top, \e verticalCenter, and \e bottom. +In addition to the more traditional \l Grid, \l Row, and \l Column, +QML also provides a way to layout items using the concept of \e anchors. +Each item can be thought of as having a set of 7 invisible "anchor lines": +\e left, \e horizontalCenter, \e right, \e top, \e verticalCenter, \e baseline, and \e bottom. \image edges_qml.png +The baseline (not pictured above) corresponds to the imaginary line on which +text would sit. For items with no text it is the same as \e top. + The QML anchoring system allows you to define relationships between the anchor lines of different items. For example, you can write: \code diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index 355c0f4..bbe01e4 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -122,6 +122,7 @@ The following table lists the QML elements provided by the Qt Declarative module \o \l Rectangle \o \l Image \o \l BorderImage +\o \l AnimatedImage \o \l Text \o \l TextInput \o \l TextEdit diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index c27d091..1c159e4 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -43,7 +43,7 @@ \page qml-extending.html \title Extending QML in C++ -The QML syntax declaratively describes how to construct an in memory object +The QML syntax declaratively describes how to construct an in-memory object tree. In Qt, QML is mainly used to describe a visual scene graph, but it is not conceptually limited to this: the QML format is an abstract description of any object tree. All the QML element types included in Qt are implemented using @@ -65,7 +65,7 @@ QML relies heavily on Qt's meta object system and can only instantiate classes that derive from QObject. The QML engine has no intrinsic knowledge of any class types. Instead the -programmer must define the C++ types, and their corresponding QML name. +programmer must register the C++ types with their corresponding QML names. Custom C++ types are registered using a template function: @@ -152,7 +152,7 @@ template int qmlRegisterInterface(const char *typeName) \endcode -Registers the C++ interface \a T with the QML system as \a typeName. +This registers the C++ interface \a T with the QML system as \a typeName. Following registration, QML can coerce objects that implement this interface for assignment to appropriately typed properties. @@ -196,7 +196,7 @@ registered, the following function can be used: int qmlRegisterType() \endcode -Registers the C++ type \a T with the QML system. The parameterless call to the template +This registers the C++ type \a T with the QML system. The parameterless call to the template function qmlRegisterType() does not define a mapping between the C++ class and a QML element name, so the type is not instantiable from QML, but it is available for type coercion. @@ -222,7 +222,7 @@ The QML snippet shown above assigns a collection of objects to the The \e {default property} is a syntactic convenience that allows a type designer to specify a single property as the type's default. The default property is assigned to whenever no explicit property is specified. As a convenience, it is -behaviorally identical to assigning the default property explicitly by name. +behaviorally identical to assigning to the default property explicitly by name. From C++, type designers mark the default property using a Q_CLASSINFO() annotation: @@ -232,7 +232,7 @@ annotation: Q_CLASSINFO("DefaultProperty", "property") \endcode -Mark \a property as the class's default property. \a property must be either +This marks \a property as the class's default property. \a property must be either an object property, or a list property. A default property is optional. A derived class inherits its base class's @@ -248,7 +248,7 @@ specify a default property. \snippet examples/declarative/extending/grouped/example.qml 1 -The QML snippet shown above assigns a number properties to the \c Boy object, +The QML snippet shown above assigns a number of properties to the \c Boy object, including four properties using the grouped property syntax. Grouped properties collect similar properties together into a single named @@ -273,13 +273,13 @@ implement the \c shoe property grouping. \snippet examples/declarative/extending/attached/example.qml 1 -The QML snippet shown above assigns the \c rsvp property using the attached +The QML snippet shown above assigns a date to the \c rsvp property using the attached property syntax. Attached properties allow unrelated types to annotate other types with some additional properties, generally for their own use. Attached properties are identified through the use of the attacher type name, in the case shown -\c BirthdayParty, as a suffix to the property name. +\c BirthdayParty, as a prefix to the property name. In the example shown, \c BirthdayParty is called the attaching type, and the \c Boy instance the attachee object instance. @@ -306,7 +306,7 @@ public: QML_DECLARE_TYPEINFO(MyType, QML_HAS_ATTACHED_PROPERTIES) \endcode -Return an attachment object, of type \a AttachedPropertiesType, for the +This returns an attachment object, of type \a AttachedPropertiesType, for the attachee \a object instance. It is customary, though not strictly required, for the attachment object to be parented to \a object to prevent memory leaks. @@ -349,7 +349,7 @@ an instance can be accessed using the following method: template QObject *qmlAttachedPropertiesObject(QObject *attachee, bool create = true); \endcode -Returns the attachment object attached to \a attachee by the attaching type +This returns the attachment object attached to \a attachee by the attaching type \a T. If type \a T is not a valid attaching type, this method always returns 0. If \a create is true, a valid attachment object will always be returned, @@ -366,7 +366,7 @@ It is an element's responsibility to ensure that it does not access or return pointers to invalid objects. QML makes the following guarentees: \list -\o An object assigned to an QObject (or QObject-derived) pointer property will be +\o An object assigned to a QObject (or QObject-derived) pointer property will be valid at the time of assignment. Following assignment, it is the responsibility of the class to subsequently guard @@ -562,19 +562,22 @@ extension type - when registering the target class whose properties are transparently merged with the original target class when used from within QML. An extension class is a regular QObject, with a constructor that takes a QObject -pointer. When needed (extension classes are delay created until the first extended +pointer. When needed (extension class creation is delayed until the first extended property is accessed) the extension class is created and the target object is passed in as the parent. When an extended property on the original is accessed, the appropriate property on the extension object is used instead. When an extended type is installed, one of the \code - #define QML_REGISTER_EXTENDED_TYPE(URI, VMAJ, VFROM, VTO, QDeclarativeName,T, ExtendedT) - #define QML_REGISTER_EXTENDED_NOCREATE_TYPE(T, ExtendedT) +template +int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName) + +template +int qmlRegisterType() \endcode -macros should be used instead of the regular \c QML_REGISTER_TYPE or -\c QML_REGISTER_NOCREATE_TYPE. The arguments are identical to the corresponding -non-extension object macro, except for the ExtendedT parameter which is the type +functions should be used instead of the regular \c qmlRegisterType() variations. +The arguments are identical to the corresponding non-extension registration functions, +except for the ExtendedT parameter which is the type of the extension object. \section1 Optimization diff --git a/doc/src/declarative/integrating.qdoc b/doc/src/declarative/integrating.qdoc index 65413ec..0051f09 100644 --- a/doc/src/declarative/integrating.qdoc +++ b/doc/src/declarative/integrating.qdoc @@ -152,8 +152,8 @@ Here is a screenshot of the result: \image declarative-integrating-graphicswidgets.png -Note this approach of creating your graphics widgets from QML does not work -with QGraphicsItem objects that are not QGraphicsWidget-based, since they are not QObjects. +Note this approach of creating your graphics objects from QML does not work +with QGraphicsItems that are not QGraphicsObject-based, since they are not QObjects. See \l{Extending QML in C++} for further information on using C++ types. diff --git a/doc/src/declarative/qdeclarativei18n.qdoc b/doc/src/declarative/qdeclarativei18n.qdoc index 0a48dd9..c7dbd4d 100644 --- a/doc/src/declarative/qdeclarativei18n.qdoc +++ b/doc/src/declarative/qdeclarativei18n.qdoc @@ -86,7 +86,7 @@ lupdate hello.qml -ts hello.ts \endcode Then we open \c hello.ts in \l{Qt Linguist Manual} {Linguist}, provide -a translation and create the release file \c hello.qml. +a translation and create the release file \c hello.qm. Finally, we can test the translation: \code diff --git a/doc/src/declarative/qmlruntime.qdoc b/doc/src/declarative/qmlruntime.qdoc index 9f7183a..a724c7d 100644 --- a/doc/src/declarative/qmlruntime.qdoc +++ b/doc/src/declarative/qmlruntime.qdoc @@ -52,7 +52,7 @@ QML is a runtime, as you can run plain qml files which pull in their required modules. To run apps with the QML runtime, you can either start the runtime - from your on application (using a QDeclarativeView) or with the simple \c qml application. + from your own application (using a QDeclarativeView) or with the simple \c qml application. The \c qml application can be installed in a production environment, assuming that it is not already present in the system. It is generally packaged alongside Qt. @@ -137,8 +137,8 @@ \section2 Runtime Object All applications using the qmlruntime will have access to the 'runtime' - property on the root context. This property contains several information - about the runtime environment of the application. + property on the root context. This property contains several pieces of + information about the runtime environment of the application. \section3 Screen Orientation @@ -150,11 +150,11 @@ which can be either Orientation.Landscape or Orientation.Portrait and which can be bound to in your application. An example is below: -\code + \code Item { state: (runtime.orientation == Orientation.Landscape) ? 'landscape' : '' } -\endcode + \endcode This allows your application to respond to the orientation of the screen changing. The runtime will automatically update this on some platforms (currently the N900 only) to match the physical @@ -163,12 +163,12 @@ \section3 Window Active The runtime.isActiveWindow property tells whether the main window of the qml runtime is currently active - or not. This is specially useful for embedded devices when you want to pause parts of your application, + or not. This is especially useful for embedded devices when you want to pause parts of your application, including animations, when your application loses focus or goes to the background. The example below, stops the animation when the application's window is deactivated and resumes on activation: -\code + \code Item { width: 300; height: 200 Rectangle { @@ -182,6 +182,6 @@ } } } -\endcode + \endcode */ -- cgit v0.12 From 81f6165b369ae07b0c70cd2684e2313491b6b2f4 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 23 Apr 2010 14:55:05 +1000 Subject: Location of binary is not on installed-content import path. Reviewed-by: mae --- tools/qml/main.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index cba5650..e484f77 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -389,8 +389,6 @@ int main(int argc, char ** argv) usage(); } - viewer->addLibraryPath(QCoreApplication::applicationDirPath()); - foreach (QString lib, imports) viewer->addLibraryPath(lib); -- cgit v0.12 From 4b3526fe1793beb6f40aa64ed7f8caa8813c58bc Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 23 Apr 2010 14:55:40 +1000 Subject: Fix hidden menu on embedded. Menu strangely still produces hits on embedded. Don't create it if frameless. --- tools/qml/qmlruntime.cpp | 23 ++++++++++++++++------- tools/qml/qmlruntime.h | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index 87a4d21..a715de9 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -537,6 +537,14 @@ QDeclarativeViewer::~QDeclarativeViewer() delete namFactory; } +int QDeclarativeViewer::menuBarHeight() const +{ + if (!(windowFlags() & Qt::FramelessWindowHint)) + return menuBar()->height(); + else + return 0; // don't create menu +} + QMenuBar *QDeclarativeViewer::menuBar() const { #if !defined(Q_OS_SYMBIAN) @@ -916,7 +924,7 @@ void QDeclarativeViewer::statusChanged() initialSize = canvas->sizeHint(); if (canvas->resizeMode() == QDeclarativeView::SizeRootObjectToView) { QSize newWindowSize = initialSize; - newWindowSize.setHeight(newWindowSize.height()+menuBar()->height()); + newWindowSize.setHeight(newWindowSize.height()+menuBarHeight()); updateSizeHints(); resize(newWindowSize); } @@ -1065,8 +1073,10 @@ void QDeclarativeViewer::setSkin(const QString& skinDirOrName) } else if (skin) { skin = 0; clearMask(); - menuBar()->clear(); - createMenu(menuBar(),0); + if ((windowFlags() & Qt::FramelessWindowHint)) { + menuBar()->clear(); + createMenu(menuBar(),0); + } canvas->setParent(this, Qt::SubWindow); setParent(0,windowFlags()); // recreate mb->show(); @@ -1079,7 +1089,7 @@ void QDeclarativeViewer::setSkin(const QString& skinDirOrName) canvas->setFixedSize(initialSize); } QSize newWindowSize = canvas->size(); - newWindowSize.setHeight(newWindowSize.height()+menuBar()->height()); + newWindowSize.setHeight(newWindowSize.height()+menuBarHeight()); resize(newWindowSize); show(); } @@ -1401,9 +1411,8 @@ void QDeclarativeViewer::updateSizeHints() { if (canvas->resizeMode() == QDeclarativeView::SizeViewToRootObject) { QSize newWindowSize = canvas->sizeHint(); - if (!skin) { - newWindowSize.setHeight(newWindowSize.height()+menuBar()->height()); - } + if (!skin) + newWindowSize.setHeight(newWindowSize.height()+menuBarHeight()); if (!isFullScreen() && !isMaximized()) { resize(newWindowSize); setFixedSize(newWindowSize); diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index a00a703..2a0a07d 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -146,6 +146,7 @@ private slots: private: QString getVideoFileName(); + int menuBarHeight() const; PreviewDeviceSkin *skin; QSize skinscreensize; -- cgit v0.12 From 624c561d64e37f8fe8cd06d4ce779b8794baddcb Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 23 Apr 2010 15:34:52 +1000 Subject: Remove out-of-date performance doc. --- doc/src/declarative/measuring-performance.qdoc | 122 ------------------------- 1 file changed, 122 deletions(-) delete mode 100644 doc/src/declarative/measuring-performance.qdoc diff --git a/doc/src/declarative/measuring-performance.qdoc b/doc/src/declarative/measuring-performance.qdoc deleted file mode 100644 index cb608bf..0000000 --- a/doc/src/declarative/measuring-performance.qdoc +++ /dev/null @@ -1,122 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! -\page optimizing-performance.html -\target optimizing-performance -\title Optimizing Performance in QML - -The Qt Declarative module includes several tools to help measure performance. - -\section1 Performance Logging - -The declarative module uses the functionality provided by QPerformanceLog to log performance information. To see this information you can add the following to src.pro: - -\code -DEFINES += Q_ENABLE_PERFORMANCE_LOG -\endcode - -The performance information will be printed to screen on a QML application startup, or when running the viewer can be forced at anytime by pressing 'F3' on the keyboard. - -Additional logging can be enabled by adding the relevant categories to qfxperf.h and qfxperf.cpp. - -For example, to measure the cost of calculating the size of a text item, you would first define a TextSize category by adding the following: - -\code -//in qfxperf.h -Q_DECLARE_PERFORMANCE_METRIC(TextSize); - -//in qfxperf.cpp -Q_DEFINE_PERFORMANCE_METRIC(TextSize, "Text Size Calculation"); -\endcode - -You could then use this category in the code: - -\code -void QDeclarativeText::updateSize() -{ - QDeclarativePerfTimer perf; - ... -} -\endcode - -Because there is no cost for a QDeclarativePerfTimer when Q_ENABLE_PERFORMANCE_LOG is not defined, this line can persist in the code and be used to help detect performance bottlenecks and regressions. See the QPerformanceLog documentation for more information on this performance framework. - -\section1 FPS Measurements - -When running the viewer, pressing 'F2' on the keyboard while a QML program is running will cause information on cost-per-frame and frames-per-second (FPS) to be printed to the console. - -The information printed includes: -\list -\o \e repaint(): the total time spent painting. -\o \e paint(): the time spent by Qt painting. -\o \e timeBetweenFrames: the total time spent per frame. This number minus repaint() gives a good idea of how much time is spent on things besides painting. A high number here with a low number for repaint() indicates expensive calculations happening each frame. -\endlist - -\section1 Improving Performance - -The following tips can help decrease startup time for QML-based appications. - -\section2 Images - -\list -\o Use jpg instead of png for photo-like images. On the N810, this can save 150ms for a large (320x480) image. - -\o If you are configuring Qt, configure out any image plugins you don't plan to support (mng and svg are the most expensive). On the N810, this can save 75-100ms startup time. For example: - -\code -configure -no-libmng -no-svg -no-libtiff -\endcode - -\o In some cases running pngcrush, optipng, gifsicle or other similar tools can give some improvement. - -We are also investigating support for the loading of uncompressed images. This will provide opportunites to decrease startup time at the cost of increased storage space. -\endlist - -\section2 Fonts - -\list -\o Use qpf instead of ttf. When using multiple font sizes and weights on the N810, this can save 125ms startup time compared to a ttf 'clean' run, and 40-50ms on subsequent runs (ttfs are shared by open applications). -\endlist - -*/ - -*/ -- cgit v0.12 From dd9617e4cdf05319f272804e293d870a00aa0b66 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 23 Apr 2010 15:37:32 +1000 Subject: Replace usage of print() with console.log(). --- demos/declarative/samegame/SamegameCore/samegame.js | 9 ++++----- demos/declarative/snake/content/snake.js | 8 ++++---- doc/src/declarative/javascriptblocks.qdoc | 14 ++++++++------ examples/declarative/dynamic/qml/itemCreation.js | 6 +++--- .../declarative/tutorials/samegame/samegame2/samegame.js | 8 ++++---- .../declarative/tutorials/samegame/samegame3/samegame.js | 8 ++++---- .../tutorials/samegame/samegame4/content/samegame.js | 8 ++++---- examples/declarative/workerscript/workerscript.qml | 6 +++--- 8 files changed, 34 insertions(+), 33 deletions(-) diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js index aafbfdf..bf99ca3 100755 --- a/demos/declarative/samegame/SamegameCore/samegame.js +++ b/demos/declarative/samegame/SamegameCore/samegame.js @@ -5,7 +5,6 @@ var maxRow = 15; var maxIndex = maxColumn*maxRow; var board = new Array(maxIndex); var blockSrc = "SamegameCore/BoomBlock.qml"; -var scoresURL = "http://qtfx-nokia.trolltech.com.au/samegame/scores.php"; var scoresURL = ""; var gameDuration; var component = Qt.createComponent(blockSrc); @@ -179,8 +178,8 @@ function createBlock(column,row){ if(component.isReady){ var dynamicObject = component.createObject(); if(dynamicObject == null){ - print("error creating block"); - print(component.errorsString()); + console.log("error creating block"); + console.log(component.errorsString()); return false; } dynamicObject.type = Math.floor(Math.random() * 3); @@ -193,8 +192,8 @@ function createBlock(column,row){ dynamicObject.spawned = true; board[index(column,row)] = dynamicObject; }else{ - print("error loading block component"); - print(component.errorsString()); + console.log("error loading block component"); + console.log(component.errorsString()); return false; } return true; diff --git a/demos/declarative/snake/content/snake.js b/demos/declarative/snake/content/snake.js index 2457fbd..02f9757 100644 --- a/demos/declarative/snake/content/snake.js +++ b/demos/declarative/snake/content/snake.js @@ -54,9 +54,9 @@ function startNewGame() } else { if(linkComponent.isReady == false){ if(linkComponent.isError == true) - print(linkComponent.errorsString()); + console.log(linkComponent.errorsString()); else - print("Still loading linkComponent"); + console.log("Still loading linkComponent"); continue;//TODO: Better error handling? } var link = linkComponent.createObject(); @@ -295,9 +295,9 @@ function createCookie(value) { if(cookieComponent.isReady == false){ if(cookieComponent.isError == true) - print(cookieComponent.errorsString()); + console.log(cookieComponent.errorsString()); else - print("Still loading cookieComponent"); + console.log("Still loading cookieComponent"); return;//TODO: Better error handling? } cookie = cookieComponent.createObject(); diff --git a/doc/src/declarative/javascriptblocks.qdoc b/doc/src/declarative/javascriptblocks.qdoc index d9a2ba5..2db7e8e 100644 --- a/doc/src/declarative/javascriptblocks.qdoc +++ b/doc/src/declarative/javascriptblocks.qdoc @@ -75,7 +75,7 @@ Item { MouseArea { anchors.fill: parent - onClicked: print(factorial(10)) + onClicked: console.log(factorial(10)) } } \endcode @@ -99,7 +99,7 @@ import "factorial.js" as MathFunctions Item { MouseArea { anchors.fill: parent - onClicked: print(MathFunctions.factorial(10)) + onClicked: console.log(MathFunctions.factorial(10)) } } \endcode @@ -207,16 +207,18 @@ is illegal in QML. \code // Illegal modification of undeclared variable a = 1; -for (var ii = 1; ii < 10; ++ii) a = a * ii; - console.log("Result: " + a); +for (var ii = 1; ii < 10; ++ii) + a = a * ii; +console.log("Result: " + a); \endcode It can be trivially modified to this legal code. \code var a = 1; -for (var ii = 1; ii < 10; ++ii) a = a * ii; - console.log("Result: " + a); +for (var ii = 1; ii < 10; ++ii) + a = a * ii; +console.log("Result: " + a); \endcode Any attempt to modify the global object - either implicitly or explicitly - will diff --git a/examples/declarative/dynamic/qml/itemCreation.js b/examples/declarative/dynamic/qml/itemCreation.js index 4fa0d9f..98d48a8 100644 --- a/examples/declarative/dynamic/qml/itemCreation.js +++ b/examples/declarative/dynamic/qml/itemCreation.js @@ -32,7 +32,7 @@ function loadComponent() { createItem(); itemComponent = Qt.createComponent(itemButton.file); - //print(itemButton.file) + //console.log(itemButton.file) if(itemComponent.isLoading){ component.statusChanged.connect(finishCreation); }else{//Depending on the content, it can be ready or error immediately @@ -51,8 +51,8 @@ function createItem() { draggedItem.z = 4;//On top } else if (itemComponent.isError) { draggedItem = null; - print("error creating component"); - print(component.errorsString()); + console.log("error creating component"); + console.log(component.errorsString()); } } diff --git a/examples/declarative/tutorials/samegame/samegame2/samegame.js b/examples/declarative/tutorials/samegame/samegame2/samegame.js index 81da31b..e5c790d 100644 --- a/examples/declarative/tutorials/samegame/samegame2/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame2/samegame.js @@ -43,8 +43,8 @@ function createBlock(column, row) { if (component.isReady) { var dynamicObject = component.createObject(); if (dynamicObject == null) { - print("error creating block"); - print(component.errorsString()); + console.log("error creating block"); + console.log(component.errorsString()); return false; } dynamicObject.parent = background; @@ -54,8 +54,8 @@ function createBlock(column, row) { dynamicObject.height = blockSize; board[index(column, row)] = dynamicObject; } else { - print("error loading block component"); - print(component.errorsString()); + console.log("error loading block component"); + console.log(component.errorsString()); return false; } return true; diff --git a/examples/declarative/tutorials/samegame/samegame3/samegame.js b/examples/declarative/tutorials/samegame/samegame3/samegame.js index eaf47d9..da0f76e 100644 --- a/examples/declarative/tutorials/samegame/samegame3/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame3/samegame.js @@ -40,8 +40,8 @@ function createBlock(column, row) { if (component.isReady) { var dynamicObject = component.createObject(); if (dynamicObject == null) { - print("error creating block"); - print(component.errorsString()); + console.log("error creating block"); + console.log(component.errorsString()); return false; } dynamicObject.type = Math.floor(Math.random() * 3); @@ -52,8 +52,8 @@ function createBlock(column, row) { dynamicObject.height = gameCanvas.blockSize; board[index(column, row)] = dynamicObject; } else { - print("error loading block component"); - print(component.errorsString()); + console.log("error loading block component"); + console.log(component.errorsString()); return false; } return true; diff --git a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js index c527f66..1454f0b 100755 --- a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js @@ -51,8 +51,8 @@ function createBlock(column, row) { if (component.isReady) { var dynamicObject = component.createObject(); if (dynamicObject == null) { - print("error creating block"); - print(component.errorsString()); + console.log("error creating block"); + console.log(component.errorsString()); return false; } dynamicObject.type = Math.floor(Math.random() * 3); @@ -65,8 +65,8 @@ function createBlock(column, row) { dynamicObject.spawned = true; board[index(column, row)] = dynamicObject; } else { - print("error loading block component"); - print(component.errorsString()); + console.log("error loading block component"); + console.log(component.errorsString()); return false; } return true; diff --git a/examples/declarative/workerscript/workerscript.qml b/examples/declarative/workerscript/workerscript.qml index 6c6253b..2294a81 100644 --- a/examples/declarative/workerscript/workerscript.qml +++ b/examples/declarative/workerscript/workerscript.qml @@ -8,9 +8,9 @@ Rectangle { source: "workerscript.js" onMessage: { - print("Moved " + messageObject.xmove + " along the X axis."); - print("Moved " + messageObject.ymove + " along the Y axis."); - print("Moved " + messageObject.move + " pixels."); + console.log("Moved " + messageObject.xmove + " along the X axis."); + console.log("Moved " + messageObject.ymove + " along the Y axis."); + console.log("Moved " + messageObject.move + " pixels."); } } -- cgit v0.12 From 571de030b02a5549c6069bf31dec69eb239870a6 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Fri, 23 Apr 2010 16:43:08 +1000 Subject: Add doc pages for qml examples. --- doc/src/declarative/examples.qdoc | 40 ++++++ doc/src/examples/qml-examples.qdoc | 260 +++++++++++++++++++++++++++++++++++++ doc/src/examples/qml-focus.qdoc | 49 ------- 3 files changed, 300 insertions(+), 49 deletions(-) create mode 100644 doc/src/examples/qml-examples.qdoc delete mode 100644 doc/src/examples/qml-focus.qdoc diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc index dc6b76c..e01459f 100644 --- a/doc/src/declarative/examples.qdoc +++ b/doc/src/declarative/examples.qdoc @@ -71,7 +71,47 @@ For example, from your build directory, run: \section1 Examples \list +\o \l{declarative/animations}{Animations} +\o \l{declarative/aspectratio}{Aspect Ratio} +\o \l{declarative/behaviors}{Behaviors} +\o \l{declarative/border-image}{Border Image} +\o \l{declarative/clocks}{Clocks} +\o \l{declarative/connections}{Connections} +\o \l{declarative/dial}{Dial} +\o \l{declarative/dynamic}{Dynamic} +\o \l{declarative/extending}{Extending} +\o \l{declarative/fillmode}{Fillmode} +\o \l{declarative/flipable}{Flipable} \o \l{declarative/focus}{Focus} +\o \l{declarative/fonts}{Fonts} +\o \l{declarative/gridview}{GridView} +\o \l{declarative/imageprovider}{Image Provider} +\o \l{declarative/images}{Images} +\o \l{declarative/layouts}{Layouts} +\o \l{declarative/listmodel-threaded}{ListModel Threaded} +\o \l{declarative/listview}{ListView} +\o \l{declarative/mousearea}{Mouse Area} +\o \l{declarative/objectlistmodel}{Object ListModel} +\o \l{declarative/package}{Package} +\o \l{declarative/parallax}{Parallax} +\o \l{declarative/plugins}{Plugins} +\o \l{declarative/progressbar}{Progress Bars} +\o \l{declarative/proxywidgets}{Proxy Widgets} +\o \l{declarative/scrollbar}{Scrollbar} +\o \l{declarative/searchbox}{Search Box} +\o \l{declarative/slideswitch}{Slide Switch} +\o \l{declarative/sql}{SQL} +\o \l{declarative/states}{States} +\o \l{declarative/stringlistmodel}{String ListModel} +\o \l{declarative/tabwidget}{Tab Widget} +\o \l{declarative/tic-tac-toe}{Tic-Tac-Toe} +\o \l{declarative/tvtennis}{TV Tennis} +\o \l{declarative/velocity}{Velocity} +\o \l{declarative/webview}{WebView} +\o \l{declarative/workerscript}{WorkerScript} +\o \l{declarative/xmldata}{XML Data} +\o \l{declarative/xmlhttprequest}{XMLHttpRequest} + \endlist \section1 Demos diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc new file mode 100644 index 0000000..93e4a46 --- /dev/null +++ b/doc/src/examples/qml-examples.qdoc @@ -0,0 +1,260 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \title Animations + \example declarative/animations + + This example shows how to use animations in QML. +*/ + +/*! + \title AspectRatio + \example declarative/aspectratio + + This example shows how to implement different aspect ratios in QML. +*/ + +/*! + \example declarative/behaviors + \title Behaviors +*/ + +/*! + \title Border Image + \example declarative/border-image + + This example shows how to use a BorderImage in QML. +*/ + +/*! + \title Clocks + \example declarative/clocks + + This example shows how to create a Clock component and reuse it in a grid. +*/ + +/*! + \title Connections + \example declarative/connections + + This example shows how to use a Connection element in QML. +*/ + +/*! + \title Dial + \example declarative/dial + + This example shows how to implement a dial in QML. +*/ + +/*! + \title Dynamic + \example declarative/dynamic + + This example shows how to create dynamic objects QML. +*/ + +/*! + \example declarative/extending + \title Extending +*/ + +/*! + \example declarative/fillmode + \title Fillmode +*/ + +/*! + \title Flipable + \example declarative/flipable + + This example shows how to use a Flipable element in QML. +*/ + +/*! + \title Focus + \example declarative/focus + + This example shows how to handle keys and focus in QML. + + \image qml-focus-example.png +*/ + +/*! + \example declarative/fonts + \title Fonts +*/ + +/*! + \example declarative/gridview + \title GridView +*/ + +/*! + \example declarative/imageprovider + \title Image Provider +*/ + +/*! + \example declarative/images + \title Images +*/ + +/*! + \example declarative/layouts + \title Layouts +*/ + +/*! + \example declarative/listmodel-threaded + \title ListModel Threaded +*/ + +/*! + \example declarative/listview + \title ListView +*/ + +/*! + \example declarative/mousearea + \title Mouse Area +*/ + +/*! + \example declarative/objectlistmodel + \title Object ListModel +*/ + +/*! + \example declarative/package + \title Package +*/ + +/*! + \example declarative/parallax + \title Parallax +*/ + +/*! + \example declarative/plugins + \title Plugins +*/ + +/*! + \example declarative/progressbar + \title Progress Bars +*/ + +/*! + \example declarative/proxywidgets + \title Proxy Widgets +*/ + +/*! + \example declarative/scrollbar + \title Scrollbar +*/ + +/*! + \example declarative/searchbox + \title Search Box +*/ + +/*! + \example declarative/slideswitch + \title Slide Switch +*/ + +/*! + \example declarative/sql + \title SQL +*/ + +/*! + \example declarative/states + \title States +*/ + +/*! + \example declarative/stringlistmodel + \title String ListModel +*/ + +/*! + \example declarative/tabwidget + \title Tab Widget +*/ + +/*! + \example declarative/tic-tac-toe + \title Tic-Tac-Toe +*/ + +/*! + \example declarative/tvtennis + \title TV Tennis +*/ + +/*! + \example declarative/velocity + \title Velocity +*/ + +/*! + \example declarative/webview + \title WebView +*/ + +/*! + \example declarative/workerscript + \title WorkerScript +*/ + +/*! + \example declarative/xmldata + \title XML Data +*/ + +/*! + \example declarative/xmlhttprequest + \title XMLHttpRequest +*/ diff --git a/doc/src/examples/qml-focus.qdoc b/doc/src/examples/qml-focus.qdoc deleted file mode 100644 index 92d93b2..0000000 --- a/doc/src/examples/qml-focus.qdoc +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \title Focus - \example declarative/focus - - This example shows how to handle keys and focus in QML. - - \image qml-focus-example.png -*/ -- cgit v0.12 From 8ede65299dc5644d84a394d6a96cbdbd39e69ecf Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 23 Apr 2010 17:01:56 +1000 Subject: no export in plugin --- src/imports/gestures/qdeclarativegesturearea_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imports/gestures/qdeclarativegesturearea_p.h b/src/imports/gestures/qdeclarativegesturearea_p.h index 8e2c066..0195511 100644 --- a/src/imports/gestures/qdeclarativegesturearea_p.h +++ b/src/imports/gestures/qdeclarativegesturearea_p.h @@ -59,7 +59,7 @@ QT_MODULE(Declarative) class QDeclarativeBoundSignal; class QDeclarativeContext; class QDeclarativeGestureAreaPrivate; -class Q_DECLARATIVE_EXPORT QDeclarativeGestureArea : public QDeclarativeItem +class QDeclarativeGestureArea : public QDeclarativeItem { Q_OBJECT -- cgit v0.12 From 3a5040ebacb177e883e2f79660194c1034fa79c2 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Fri, 23 Apr 2010 16:42:16 +1000 Subject: Add tutorial for writing QML extensions --- doc/src/declarative/declarativeui.qdoc | 11 +- doc/src/declarative/extending-tutorial.qdoc | 419 +++++++++++++++++++++ .../tutorials/extending/chapter1-basics/app.qml | 17 + .../extending/chapter1-basics/chapter1-basics.pro | 5 + .../tutorials/extending/chapter1-basics/main.cpp | 58 +++ .../extending/chapter1-basics/musician.cpp | 67 ++++ .../tutorials/extending/chapter1-basics/musician.h | 69 ++++ .../tutorials/extending/chapter2-methods/app.qml | 19 + .../chapter2-methods/chapter2-methods.pro | 5 + .../tutorials/extending/chapter2-methods/main.cpp | 58 +++ .../extending/chapter2-methods/musician.cpp | 75 ++++ .../extending/chapter2-methods/musician.h | 82 ++++ .../tutorials/extending/chapter3-bindings/app.qml | 31 ++ .../chapter3-bindings/chapter3-bindings.pro | 5 + .../tutorials/extending/chapter3-bindings/main.cpp | 58 +++ .../extending/chapter3-bindings/musician.cpp | 77 ++++ .../extending/chapter3-bindings/musician.h | 83 ++++ .../extending/chapter4-customPropertyTypes/app.qml | 13 + .../chapter4-customPropertyTypes.pro | 7 + .../chapter4-customPropertyTypes/instrument.cpp | 57 +++ .../chapter4-customPropertyTypes/instrument.h | 64 ++++ .../chapter4-customPropertyTypes/main.cpp | 67 ++++ .../chapter4-customPropertyTypes/musician.cpp | 68 ++++ .../chapter4-customPropertyTypes/musician.h | 79 ++++ .../tutorials/extending/chapter5-plugins/app.qml | 13 + .../chapter5-plugins/chapter5-plugins.pro | 15 + .../extending/chapter5-plugins/instrument.cpp | 57 +++ .../extending/chapter5-plugins/instrument.h | 62 +++ .../extending/chapter5-plugins/musician.cpp | 68 ++++ .../extending/chapter5-plugins/musician.h | 69 ++++ .../extending/chapter5-plugins/musicplugin.cpp | 55 +++ .../extending/chapter5-plugins/musicplugin.h | 56 +++ .../tutorials/extending/chapter5-plugins/qmldir | 1 + 33 files changed, 1887 insertions(+), 3 deletions(-) create mode 100644 doc/src/declarative/extending-tutorial.qdoc create mode 100644 examples/declarative/tutorials/extending/chapter1-basics/app.qml create mode 100644 examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro create mode 100644 examples/declarative/tutorials/extending/chapter1-basics/main.cpp create mode 100644 examples/declarative/tutorials/extending/chapter1-basics/musician.cpp create mode 100644 examples/declarative/tutorials/extending/chapter1-basics/musician.h create mode 100644 examples/declarative/tutorials/extending/chapter2-methods/app.qml create mode 100644 examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro create mode 100644 examples/declarative/tutorials/extending/chapter2-methods/main.cpp create mode 100644 examples/declarative/tutorials/extending/chapter2-methods/musician.cpp create mode 100644 examples/declarative/tutorials/extending/chapter2-methods/musician.h create mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/app.qml create mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro create mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/main.cpp create mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp create mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/musician.h create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/app.qml create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/instrument.h create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musician.h create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h create mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/qmldir diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 55945e6..8f36582 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -76,7 +76,6 @@ completely new applications. QML is fully \l {Extending QML in C++}{extensible \o \l {QML Tutorial}{Tutorial: 'Hello World'} \o \l {QML Advanced Tutorial}{Tutorial: 'Same Game'} \o \l {QML Examples and Demos} -\o \l {Using QML in C++ Applications} \o \l {QML for Qt programmers} \endlist @@ -98,12 +97,18 @@ completely new applications. QML is fully \l {Extending QML in C++}{extensible \o \l {qmlruntime.html}{The Qt Declarative Runtime} \endlist +\section1 Using QML with C++: +\list +\o \l {Tutorial: Writing QML extensions with C++} +\o \l {Extending QML in C++} +\o \l {Using QML in C++ Applications} +\o \l {Integrating QML with existing Qt UI code} +\endlist + \section1 Reference: \list \o \l {QML Elements} \o \l {QML Global Object} -\o \l {Extending QML in C++} -\o \l {Integrating QML with existing Qt UI code} \o \l {QML Internationalization} \o \l {QML Security} \o \l {QtDeclarative Module} diff --git a/doc/src/declarative/extending-tutorial.qdoc b/doc/src/declarative/extending-tutorial.qdoc new file mode 100644 index 0000000..a139616 --- /dev/null +++ b/doc/src/declarative/extending-tutorial.qdoc @@ -0,0 +1,419 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + +\page qml-extending-tutorial-index.html +\title Tutorial: Writing QML extensions with C++ + +The QtDeclarative module provides a set of APIs for extending QML through +C++ extensions. You can write extensions to add your own QML types, extend existing +Qt types, or call C/C++ functions that are not accessible from ordinary QML code. + +This tutorial shows how to write a QML extension using C++ that includes +core QML features, including properties, signals and bindings. It also shows how +extensions can be deployed through plugins. + +You can find the source code for this tutorial in \c Qt's +examples/declarative/tutorials/extending directory. + +Tutorial chapters: + +\list 1 +\o \l{declarative/tutorials/extending/chapter1-basics}{Creating a New Type} +\o \l{declarative/tutorials/extending/chapter2-methods}{Connecting to C++ Methods and Signals} +\o \l{declarative/tutorials/extending/chapter3-bindings}{Adding Property Bindings} +\o \l{declarative/tutorials/extending/chapter4-customPropertyTypes}{Using Custom Property Types} +\o \l{declarative/tutorials/extending/chapter5-plugins}{Deploying Your Extension} +\o \l{qml-extending-tutorial6.html}{In Summary} +\endlist + +*/ + +/*! +\title Chapter 1: Creating a New Type + +\example declarative/tutorials/extending/chapter1-basics + +Let's create a new QML type called "Musician" that has two properties: a name +and an instrument. We will make it available in a \l {Modules}{module} called "Music", with +a module version of 1.0. +We want this \c Musician type to be usable from QML like this: + +\code + import Music 1.0 + + Musician { + name: "Reddy the Rocker" + instrument: "Guitar" + } +\endcode + +To do this, we need a C++ class that encapsulates this \c Musician type and its two +properties. Since QML relies heavily on Qt's \l{Meta-Object System}{meta object system}, +this new class must: + +\list +\o inherit from QObject +\o declare its properties using the Q_PROPERTY() macro +\endlist + +Here is our \c Musician class, defined in \c musician.h: + +\snippet declarative/tutorials/extending/chapter1-basics/musician.h 0 + +It defines the two properties, \c name and \c instrument, with the Q_PROPERTY() macro. +The class implementation in \c musician.cpp simply sets and returns the \c m_name and +\c m_instrument values as appropriate. + +Our QML file, \c app.qml, creates a \c Musician item and display the musician's details +using a standard QML \l Text item: + +\quotefile declarative/tutorials/extending/chapter1-basics/app.qml + +We'll also create a C++ application that uses a QDeclarativeView to run and +display \c app.qml. The application must register the \c Musician type +using the qmlRegisterType() function, to allow it to be used from QML. If +you don't register the type, \c app.qml won't be able to create a \c Musician. + +Here is the application \c main.cpp: + +\snippet declarative/tutorials/extending/chapter1-basics/main.cpp 0 + +This call to qmlRegisterType() registers the \c Musician type as a type called "Musician", in a module named "Music", +with a module version of 1.0. + +Lastly, we write a \c .pro project file that includes the files and the \c declarative library: + +\quotefile declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro + +Now we can build and run the application. Try it yourself with the code in Qt's \c examples/tutorials/extending/chapter1-basics directory. + +\example declarative/tutorials/extending/chapter1-basics + +At the moment, the \c app.qml is run from within a C++ application. +This may seem odd if you're used to running QML files with the standard \c qml tool. +Later on, we'll show how to create a plugin so that you can run \c app.qml using the +\c qml tool instead. + +*/ + + +/*! +\title Chapter 2: Connecting to C++ Methods and Signals + +\example declarative/tutorials/extending/chapter2-methods + +Suppose we want \c Musician to have a "perform" method that prints a message +to the console and then emits a "performanceEnded" signal. +Other elements would be able to call \c perform() and receive +\c performanceEnded() signals like this: + +\quotefile declarative/tutorials/extending/chapter2-methods/app.qml + +To do this, we add a \c perform() method and a \c performanceEnded() signal +to our C++ class: + +\snippet declarative/tutorials/extending/chapter2-methods/musician.h 0 +\dots +\snippet declarative/tutorials/extending/chapter2-methods/musician.h 1 +\dots +\snippet declarative/tutorials/extending/chapter2-methods/musician.h 2 +\dots +\snippet declarative/tutorials/extending/chapter2-methods/musician.h 3 + +The use of Q_INVOKABLE makes the \c perform() method available to the +Qt Meta-Object system, and in turn, to QML. Note that it could have +been declared as as a Qt slot instead of using Q_INVOKABLE, as +slots are also callable from QML. Both of these approaches are valid. + +The \c perform() method simply prints a message to the console and +then emits \c performanceEnded(): + +\snippet declarative/tutorials/extending/chapter2-methods/musician.cpp 0 + +Now when we run the application and click the window, the application outputs: + +\code + "Reddy the Rocker" is playing the "Guitar" + The performance has now ended +\endcode + +Try out the example yourself with the updated code in Qt's \c examples/tutorials/extending/chapter2-methods directory. + +*/ + +/*! +\title Chapter 3: Adding Property Bindings + +\example declarative/tutorials/extending/chapter3-bindings + +Property bindings is a powerful feature of QML that allows values of different +elements to be synchronized automatically. It uses signals to notify and update +other elements' values when property values change. + +Let's enable property bindings for the \c instrument property. That means +if we have code like this: + +\quotefile declarative/tutorials/extending/chapter3-bindings/app.qml + +The "instrument: reddy.instrument" statement binds the \c instrument value of +\c craig to the \c instrument of \c reddy. +Whenever \c reddy's \c instrument value changes, \c craig's \c instrument value +updates to the same value. When the window is clicked, the application outputs: + +\code + "Reddy the Rocker" is playing the "Guitar" + "Craig the Copycat" is playing the "Guitar" + "Reddy the Rocker" is playing the "Drums" + "Craig the Copycat" is playing the "Drums" +\endcode + +It's easy to enable property binding for the \c instrument property. +We add a \l{Qt's Property System}{NOTIFY} feature to its Q_PROPERTY() declaration to indicate that a "instrumentChanged" signal +is emitted whenever the value changes. + +\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 0 +\dots +\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 1 +\dots +\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 2 +\dots +\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 3 + +Then, we emit this signal in \c setInstrument(): + +\snippet declarative/tutorials/extending/chapter3-bindings/musician.cpp 0 + +It's important for \c setInstrument() to check that the instrument value has actually changed +before emitting \c instrumentChanged(). This ensures the signal is not emitted unnecessarily and +also prevents loops when other elements respond to the value change. + +*/ + +/*! +\title Chapter 4: Using Custom Property Types + +\example declarative/tutorials/extending/chapter4-customPropertyTypes + +The \c Musician type currently has two properties that are both strings. +It could have all sorts of other properties. For example, we could add an +integer-type property to store the age of each musician: + +\code + class Musician : public QObject + { + ... + Q_PROPERTY(int age READ age WRITE setAge) + public: + ... + int age() const; + void setAge(int age); + ... + }; +\endcode + +We can also use various other property types. QML has built-in support for the following +types: + +\list +\o bool +\o unsigned int, int +\o float, double, qreal +\o QString +\o QUrl +\o QColor +\o QDate, QTime, QDateTime +\o QPoint, QPointF +\o QSize, QSizeF +\o QRect, QRectF +\o QVariant +\endlist + +If we want to create a property whose type is not supported by QML by default, +we need to register the type with QML. + +For example, let's change the type of the \c instrument property from a string to a +new type called "Instrument". Instead of assigning a string value to \c instrument, +we assign an \c Instrument value: + +\quotefile declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml + +Like \c Musician, this new \c Instrument type has to inherit from QObject and declare +its properties with Q_PROPERTY(): + +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h 0 + +To use it from \c Musician, we modify the \c instrument property declaration +and associated method signatures: + +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 0 +\dots +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 1 +\dots +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 2 +\dots +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 3 + +Like the \c Musician type, the \c Instrument type has to be registered +using qmlRegisterType() to be used from QML. As with \c Musician, we'll add the +type to the "Music" module, version 1.0: + +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp 0 +\dots +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp 1 +\dots +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp 2 + +Try it out with the code in Qt's \c examples/tutorials/extending/chapter4-customPropertyTypes directory. + +*/ + +/*! +\title Chapter 5: Deploying Your Extension + +\example declarative/tutorials/extending/chapter5-plugins + +Currently the \c Musician and \c Instrument types are used by \c app.qml, +which is displayed using a QDeclarativeView in a C++ application. An alternative +way to use our QML extension is to create a plugin library to make it available +to the QML engine. This means we could load \c app.qml using the standard \c qml tool +instead of writing a \c main.cpp file and loading our own C++ application. + +To create a plugin library, we need: + +\list +\o A plugin class that registers our QML types +\o A project file that describes the plugin +\o A "qmldir" file that tells the QML engine to load the plugin +\endlist + +First, we create a plugin class named \c MusicPlugin. It subclasses QDeclarativeExtensionPlugin +and registers our QML types in the inherited \l{QDeclarativeExtensionPlugin::}{registerTypes()} method. It also calls +Q_EXPORT_PLUGIN2 for Qt's \l{How to Create Qt Plugins}{plugin system}. + +Here is the \c MusicPlugin definition in \c musicplugin.h: + +\snippet declarative/tutorials/extending/chapter5-plugins/musicplugin.h 0 + +And its implementation in \c musicplugin.cpp: + +\snippet declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp 0 + +Then, we write a \c .pro project file that defines the project as a plugin library +and specifies with DESTDIR that library files should be built into a "lib" subdirectory: + +\quotefile declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro + +Finally, we add a \c qmldir file that is automatically parsed by the QML engine. +Here, we specify that a plugin named "chapter5-plugin" (the name +of the example project) can be found in the "lib" subdirectory: + +\quotefile declarative/tutorials/extending/chapter5-plugins/qmldir + +Now we have a plugin, and instead of having a main.cpp and an executable, we can build +the project and then run the QML file directly using the \c qml tool: + +\code + qml app.qml +\endcode + +Notice the "import Music 1.0" statement has disappeared from \c app.qml. This is +because the \c qmldir file is in the same directory as \c app.qml: this is equivalent to +having Musician.qml and Instrument.qml files inside the project directory, which could both +be used by \c app.qml without import statements. +*/ + +/*! +\page qml-extending-tutorial6.html +\title Chapter 6: In Summary + +In this tutorial, we've shown the basic steps for creating a QML extension: + +\list +\o Define new QML types by subclassing QObject and registering them with qmlRegisterType() +\o Add callable methods using Q_INVOKABLE or Qt slots, and connect to Qt signals with an \c onSignal syntax +\o Add property bindings by defining \l{Qt's Property System}{NOTIFY} signals +\o Define custom property types if the built-in types are not sufficient +\o Create a plugin library by defining a Qt plugin and writing a \c qmldir file +\endlist + + +The \l {Extending QML in C++} reference documentation shows other useful features that can be added to +QML extensions. For example, we could use \l{Object and List Property Types}{list properties} to allow multiple instruments for a \c Musician: + +\code + Musician { + instruments: [ + Instrument { type: "Guitar" } + Instrument { type: "Drums" } + Instrument { type: "Keyboard" } + ] + } +\endcode + +Or use \l{Default Property}{default properties} and avoid an +\c instruments property altogether: + +\code + Musician { + Instrument { type: "Guitar" } + Instrument { type: "Drums" } + Instrument { type: "Keyboard" } + } +\endcode + +Or even change the \c instrument of a \c Musician from time to time using \l{Property Value Sources}{property value sources}: + +\code + Musician { + InstrumentRandomizer on instrument {} + } +\endcode + + +See the \l{Extending QML in C++}{reference documentation} for more information. + +Additionally, \l {Integrating QML with existing Qt UI code} shows how to create +and integrate with QML extensions that have drawing and graphical capabilities (through QGraphicsWidget). + +*/ + diff --git a/examples/declarative/tutorials/extending/chapter1-basics/app.qml b/examples/declarative/tutorials/extending/chapter1-basics/app.qml new file mode 100644 index 0000000..15dcd2d --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter1-basics/app.qml @@ -0,0 +1,17 @@ +import Music 1.0 +import Qt 4.7 + +Rectangle { + width: 300; height: 200 + + Musician { + id: aMusician + name: "Reddy the Rocker" + instrument: "Guitar" + } + + Text { + anchors.fill: parent + text: aMusician.name + " plays the " + aMusician.instrument + } +} diff --git a/examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro b/examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro new file mode 100644 index 0000000..bd05ebe --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro @@ -0,0 +1,5 @@ +QT += declarative + +HEADERS += musician.h +SOURCES += musician.cpp \ + main.cpp diff --git a/examples/declarative/tutorials/extending/chapter1-basics/main.cpp b/examples/declarative/tutorials/extending/chapter1-basics/main.cpp new file mode 100644 index 0000000..0e71bb0 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter1-basics/main.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +#include "musician.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + qmlRegisterType("Music", 1, 0, "Musician"); + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile("app.qml")); + view.show(); + return app.exec(); +} +//![0] diff --git a/examples/declarative/tutorials/extending/chapter1-basics/musician.cpp b/examples/declarative/tutorials/extending/chapter1-basics/musician.cpp new file mode 100644 index 0000000..b545f84 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter1-basics/musician.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "musician.h" + +Musician::Musician(QObject *parent) + : QObject(parent) +{ +} + +QString Musician::name() const +{ + return m_name; +} + +void Musician::setName(const QString &name) +{ + m_name = name; +} + +QString Musician::instrument() const +{ + return m_instrument; +} + +void Musician::setInstrument(const QString &instrument) +{ + m_instrument = instrument; +} + diff --git a/examples/declarative/tutorials/extending/chapter1-basics/musician.h b/examples/declarative/tutorials/extending/chapter1-basics/musician.h new file mode 100644 index 0000000..70ade82 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter1-basics/musician.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MUSICIAN_H +#define MUSICIAN_H + +//![0] +#include + +class Musician : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QString instrument READ instrument WRITE setInstrument) + +public: + Musician(QObject *parent = 0); + + QString name() const; + void setName(const QString &name); + + QString instrument() const; + void setInstrument(const QString &instrument); + +private: + QString m_name; + QString m_instrument; +}; +//![0] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter2-methods/app.qml b/examples/declarative/tutorials/extending/chapter2-methods/app.qml new file mode 100644 index 0000000..35e083e --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter2-methods/app.qml @@ -0,0 +1,19 @@ +import Music 1.0 +import Qt 4.7 + +Rectangle { + width: 200; height: 200 + + Musician { + id: aMusician + name: "Reddy the Rocker" + instrument: "Guitar" + + onPerformanceEnded: console.log("The performance has now ended") + } + + MouseArea { + anchors.fill: parent + onClicked: aMusician.perform() + } +} diff --git a/examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro b/examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro new file mode 100644 index 0000000..bd05ebe --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro @@ -0,0 +1,5 @@ +QT += declarative + +HEADERS += musician.h +SOURCES += musician.cpp \ + main.cpp diff --git a/examples/declarative/tutorials/extending/chapter2-methods/main.cpp b/examples/declarative/tutorials/extending/chapter2-methods/main.cpp new file mode 100644 index 0000000..0e71bb0 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter2-methods/main.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +#include "musician.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + qmlRegisterType("Music", 1, 0, "Musician"); + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile("app.qml")); + view.show(); + return app.exec(); +} +//![0] diff --git a/examples/declarative/tutorials/extending/chapter2-methods/musician.cpp b/examples/declarative/tutorials/extending/chapter2-methods/musician.cpp new file mode 100644 index 0000000..3df19e3 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter2-methods/musician.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "musician.h" +#include + +Musician::Musician(QObject *parent) + : QObject(parent) +{ +} + +QString Musician::name() const +{ + return m_name; +} + +void Musician::setName(const QString &name) +{ + m_name = name; +} + +QString Musician::instrument() const +{ + return m_instrument; +} + +void Musician::setInstrument(const QString &instrument) +{ + m_instrument = instrument; +} + +//![0] +void Musician::perform() +{ + qWarning() << m_name << "is playing the" << m_instrument; + emit performanceEnded(); +} +//![0] diff --git a/examples/declarative/tutorials/extending/chapter2-methods/musician.h b/examples/declarative/tutorials/extending/chapter2-methods/musician.h new file mode 100644 index 0000000..dc48759 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter2-methods/musician.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MUSICIAN_H +#define MUSICIAN_H + +#include + +//![0] +class Musician : public QObject +{ +//![0] + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QString instrument READ instrument WRITE setInstrument) + +//![1] +public: +//![1] + + Musician(QObject *parent = 0); + + QString name() const; + void setName(const QString &name); + + QString instrument() const; + void setInstrument(const QString &instrument); + +//![2] + Q_INVOKABLE void perform(); + +signals: + void performanceEnded(); +//![2] + +private: + QString m_name; + QString m_instrument; + +//![3] +}; +//![3] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/app.qml b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml new file mode 100644 index 0000000..0460b0b --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml @@ -0,0 +1,31 @@ +import Music 1.0 +import Qt 4.7 + +Rectangle { + width: 200; height: 200 + + Musician { + id: reddy + name: "Reddy the Rocker" + instrument: "Guitar" + } + + Musician { + id: craig + name: "Craig the Copycat" + instrument: reddy.instrument + } + + MouseArea { + anchors.fill: parent + onClicked: { + reddy.perform() + craig.perform() + + reddy.instrument = "Drums" + + reddy.perform() + craig.perform() + } + } +} diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro b/examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro new file mode 100644 index 0000000..bd05ebe --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro @@ -0,0 +1,5 @@ +QT += declarative + +HEADERS += musician.h +SOURCES += musician.cpp \ + main.cpp diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/main.cpp b/examples/declarative/tutorials/extending/chapter3-bindings/main.cpp new file mode 100644 index 0000000..0e71bb0 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter3-bindings/main.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +#include "musician.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + qmlRegisterType("Music", 1, 0, "Musician"); + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile("app.qml")); + view.show(); + return app.exec(); +} +//![0] diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp b/examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp new file mode 100644 index 0000000..eb615f6 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "musician.h" +#include + +Musician::Musician(QObject *parent) + : QObject(parent) +{ +} + +QString Musician::name() const +{ + return m_name; +} + +void Musician::setName(const QString &name) +{ + m_name = name; +} + +QString Musician::instrument() const +{ + return m_instrument; +} + +//![0] +void Musician::setInstrument(const QString &instrument) +{ + if (instrument != m_instrument) { + m_instrument = instrument; + emit instrumentChanged(); + } +} +//![0] + +void Musician::perform() +{ + qWarning() << m_name << "is playing the" << m_instrument; +} diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/musician.h b/examples/declarative/tutorials/extending/chapter3-bindings/musician.h new file mode 100644 index 0000000..39887be --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter3-bindings/musician.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MUSICIAN_H +#define MUSICIAN_H + +#include + +//![0] +class Musician : public QObject +{ +//![0] + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QString instrument READ instrument WRITE setInstrument) + +//![1] + Q_PROPERTY(QString instrument READ instrument WRITE setInstrument NOTIFY instrumentChanged) +public: +//![1] + + Musician(QObject *parent = 0); + + QString name() const; + void setName(const QString &name); + + QString instrument() const; + void setInstrument(const QString &instrument); + + Q_INVOKABLE void perform(); + +//![2] +signals: + void instrumentChanged(); +//![2] + +private: + QString m_name; + QString m_instrument; + +//![3] +}; +//![3] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml new file mode 100644 index 0000000..ae9272e --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml @@ -0,0 +1,13 @@ +import Music 1.0 +import Qt 4.7 + +Item { + + Musician { + id: reddy + name: "Reddy the Rocker" + instrument: Instrument { type: "Guitar" } + } + + Component.onCompleted: console.log("Reddy plays the " + reddy.instrument.type) +} diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro new file mode 100644 index 0000000..aea07a0 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro @@ -0,0 +1,7 @@ +QT += declarative + +HEADERS += musician.h \ + instrument.h +SOURCES += musician.cpp \ + instrument.cpp \ + main.cpp diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp new file mode 100644 index 0000000..13cd2fe --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "instrument.h" + +Instrument::Instrument(QObject *parent) + : QObject(parent) +{ +} + +QString Instrument::type() const +{ + return m_type; +} + +void Instrument::setType(const QString &type) +{ + m_type = type; +} + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h new file mode 100644 index 0000000..e2f09be --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef INSTRUMENT_H +#define INSTRUMENT_H + +#include + +//![0] +class Instrument : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString type READ type WRITE setType) + +public: + Instrument(QObject *parent = 0); + + QString type() const; + void setType(const QString &type); + +private: + QString m_type; +}; +//![0] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp new file mode 100644 index 0000000..cbbbc0f --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "musician.h" +#include "instrument.h" + +#include +#include +#include + +//![0] +int main(int argc, char *argv[]) +{ +//![0] + QApplication app(argc, argv); + + qmlRegisterType("Music", 1, 0, "Musician"); + +//![1] + qmlRegisterType("Music", 1, 0, "Instrument"); +//![1] + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile("app.qml")); + view.show(); + return app.exec(); + +//![2] +} +//![2] diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp new file mode 100644 index 0000000..6b66d5d --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "musician.h" +#include "instrument.h" + +Musician::Musician(QObject *parent) + : QObject(parent) +{ +} + +QString Musician::name() const +{ + return m_name; +} + +void Musician::setName(const QString &name) +{ + m_name = name; +} + +Instrument *Musician::instrument() const +{ + return m_instrument; +} + +void Musician::setInstrument(Instrument *instrument) +{ + m_instrument = instrument; +} + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h new file mode 100644 index 0000000..d0aa118 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MUSICIAN_H +#define MUSICIAN_H + +#include + +class Instrument; + +//![0] +class Musician : public QObject +{ + Q_OBJECT + Q_PROPERTY(Instrument* instrument READ instrument WRITE setInstrument) +//![0] + Q_PROPERTY(QString name READ name WRITE setName) + +//![1] +public: +//![1] + + Musician(QObject *parent = 0); + + QString name() const; + void setName(const QString &name); + +//![2] + Instrument *instrument() const; + void setInstrument(Instrument *instrument); +//![2] + +private: + QString m_name; + Instrument *m_instrument; + +//![3] +}; +//![3] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/app.qml b/examples/declarative/tutorials/extending/chapter5-plugins/app.qml new file mode 100644 index 0000000..51c1232 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/app.qml @@ -0,0 +1,13 @@ +import Qt 4.7 + +Item { + + Musician { + id: reddy + name: "Reddy the Rocker" + instrument: Instrument { type: "Guitar" } + } + + Component.onCompleted: console.log("Reddy plays the " + reddy.instrument.type) +} + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro b/examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro new file mode 100644 index 0000000..7ec68e9 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro @@ -0,0 +1,15 @@ +TEMPLATE = lib +CONFIG += qt plugin +QT += declarative + +HEADERS += musician.h \ + instrument.h \ + musicplugin.h + +SOURCES += musician.cpp \ + instrument.cpp \ + musicplugin.cpp + +DESTDIR = lib +OBJECTS_DIR = tmp +MOC_DIR = tmp diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp b/examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp new file mode 100644 index 0000000..13cd2fe --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "instrument.h" + +Instrument::Instrument(QObject *parent) + : QObject(parent) +{ +} + +QString Instrument::type() const +{ + return m_type; +} + +void Instrument::setType(const QString &type) +{ + m_type = type; +} + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/instrument.h b/examples/declarative/tutorials/extending/chapter5-plugins/instrument.h new file mode 100644 index 0000000..15f9fae --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/instrument.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef INSTRUMENT_H +#define INSTRUMENT_H + +#include + +class Instrument : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString type READ type WRITE setType) + +public: + Instrument(QObject *parent = 0); + + QString type() const; + void setType(const QString &type); + +private: + QString m_type; +}; + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp b/examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp new file mode 100644 index 0000000..6b66d5d --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "musician.h" +#include "instrument.h" + +Musician::Musician(QObject *parent) + : QObject(parent) +{ +} + +QString Musician::name() const +{ + return m_name; +} + +void Musician::setName(const QString &name) +{ + m_name = name; +} + +Instrument *Musician::instrument() const +{ + return m_instrument; +} + +void Musician::setInstrument(Instrument *instrument) +{ + m_instrument = instrument; +} + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musician.h b/examples/declarative/tutorials/extending/chapter5-plugins/musician.h new file mode 100644 index 0000000..3c3eb2e --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/musician.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MUSICIAN_H +#define MUSICIAN_H + +#include + +class Instrument; + +class Musician : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(Instrument* instrument READ instrument WRITE setInstrument) + +public: + Musician(QObject *parent = 0); + + QString name() const; + void setName(const QString &name); + + Instrument *instrument() const; + void setInstrument(Instrument *instrument); + +private: + QString m_name; + Instrument *m_instrument; +}; + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp b/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp new file mode 100644 index 0000000..e2f6244 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "musicplugin.h" +//![0] +#include "musician.h" +#include "instrument.h" +#include + +void MusicPlugin::registerTypes(const char *uri) +{ + qmlRegisterType(uri, 1, 0, "Musician"); + qmlRegisterType(uri, 1, 0, "Instrument"); +} + +Q_EXPORT_PLUGIN2(musicplugin, MusicPlugin); +//![0] + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h b/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h new file mode 100644 index 0000000..df8c9ab --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MUSICPLUGIN_H +#define MUSICPLUGIN_H + +//![0] +#include + +class MusicPlugin : public QDeclarativeExtensionPlugin +{ + Q_OBJECT +public: + void registerTypes(const char *uri); +}; +//![0] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/qmldir b/examples/declarative/tutorials/extending/chapter5-plugins/qmldir new file mode 100644 index 0000000..c3afd6b --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-plugins/qmldir @@ -0,0 +1 @@ +plugin chapter5-plugins lib -- cgit v0.12 From 631b1eaa6fa84f597efc016db617704da81b7e00 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Fri, 23 Apr 2010 17:18:13 +1000 Subject: Link to example files from tutorial pages --- doc/src/declarative/advtutorial.qdoc | 19 +++++++++---------- .../tutorials/samegame/samegame1/samegame1.qmlproject | 16 ++++++++++++++++ .../tutorials/samegame/samegame2/samegame2.qmlproject | 16 ++++++++++++++++ .../tutorials/samegame/samegame3/samegame3.qmlproject | 16 ++++++++++++++++ .../tutorials/samegame/samegame4/samegame4.qmlproject | 16 ++++++++++++++++ 5 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 examples/declarative/tutorials/samegame/samegame1/samegame1.qmlproject create mode 100644 examples/declarative/tutorials/samegame/samegame2/samegame2.qmlproject create mode 100644 examples/declarative/tutorials/samegame/samegame3/samegame3.qmlproject create mode 100644 examples/declarative/tutorials/samegame/samegame4/samegame4.qmlproject diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc index c465da4..2d05850 100644 --- a/doc/src/declarative/advtutorial.qdoc +++ b/doc/src/declarative/advtutorial.qdoc @@ -66,13 +66,13 @@ control QML elements. Tutorial chapters: \list 1 -\o \l {QML Advanced Tutorial 1 - Creating the Game Canvas and Blocks}{Creating the Game Canvas and Blocks} -\o \l {QML Advanced Tutorial 2 - Populating the Game Canvas}{Populating the Game Canvas} -\o \l {QML Advanced Tutorial 3 - Implementing the Game Logic}{Implementing the Game Logic} -\o \l {QML Advanced Tutorial 4 - Finishing Touches}{Finishing Touches} +\o \l {declarative/tutorials/samegame/samegame1}{Creating the Game Canvas and Blocks} +\o \l {declarative/tutorials/samegame/samegame2}{Populating the Game Canvas} +\o \l {declarative/tutorials/samegame/samegame3}{Implementing the Game Logic} +\o \l {declarative/tutorials/samegame/samegame4}{Finishing Touches} \endlist -All the code in this tutorial can be found in the $QTDIR/examples/declarative/tutorials/samegame +All the code in this tutorial can be found in Qt's \c examples/declarative/tutorials/samegame directory. */ @@ -83,7 +83,7 @@ directory. \previouspage QML Advanced Tutorial \nextpage QML Advanced Tutorial 2 - Populating the Game Canvas -The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame1. +\example declarative/tutorials/samegame/samegame1 \section2 Creating the application screen @@ -148,8 +148,7 @@ elements to get started. Next, we will populate the game canvas with some blocks \previouspage QML Advanced Tutorial 1 - Creating the Game Canvas and Blocks \nextpage QML Advanced Tutorial 3 - Implementing the Game Logic -The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame2. - +\example declarative/tutorials/samegame/samegame2 \section2 Generating the blocks in JavaScript @@ -216,7 +215,7 @@ Now, we have a screen of blocks, and we can begin to add the game mechanics. \previouspage QML Advanced Tutorial 2 - Populating the Game Canvas \nextpage QML Advanced Tutorial 4 - Finishing Touches -The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame3. +\example declarative/tutorials/samegame/samegame3 \section2 Making a playable game @@ -301,7 +300,7 @@ until the next chapter - where your application becomes alive! \contentspage QML Advanced Tutorial \previouspage QML Advanced Tutorial 3 - Implementing the Game Logic -The files referenced on this page can be found in \c $QTDIR\examples\tutorials\samegame\samegame4. +\example declarative/tutorials/samegame/samegame4 \section2 Adding some flair diff --git a/examples/declarative/tutorials/samegame/samegame1/samegame1.qmlproject b/examples/declarative/tutorials/samegame/samegame1/samegame1.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/tutorials/samegame/samegame1/samegame1.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/tutorials/samegame/samegame2/samegame2.qmlproject b/examples/declarative/tutorials/samegame/samegame2/samegame2.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/tutorials/samegame/samegame2/samegame2.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/tutorials/samegame/samegame3/samegame3.qmlproject b/examples/declarative/tutorials/samegame/samegame3/samegame3.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/tutorials/samegame/samegame3/samegame3.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/tutorials/samegame/samegame4/samegame4.qmlproject b/examples/declarative/tutorials/samegame/samegame4/samegame4.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/tutorials/samegame/samegame4/samegame4.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} -- cgit v0.12