diff options
Diffstat (limited to 'examples')
102 files changed, 624 insertions, 251 deletions
diff --git a/examples/qml/doc/src/qml-extending.qdoc b/examples/qml/doc/src/qml-extending.qdoc index e56dd90dd7..64d7235031 100644 --- a/examples/qml/doc/src/qml-extending.qdoc +++ b/examples/qml/doc/src/qml-extending.qdoc @@ -178,12 +178,14 @@ previous example. However, as we have repurposed the People class as a common base for Boy and Girl, we want to prevent it from being instantiated from QML directly - an explicit Boy or Girl should be instantiated instead. -\snippet referenceexamples/coercion/main.cpp 0 +\snippet referenceexamples/coercion/person.h 0 While we want to disallow instantiating Person from within QML, it still needs to be registered with the QML engine, so that it can be used as a property type and other types can be coerced to it. +\snippet referenceexamples/coercion/main.cpp 0 + \section2 Define Boy and Girl The implementation of Boy and Girl is trivial. diff --git a/examples/qml/qmlextensionplugins/plugin.cpp b/examples/qml/qmlextensionplugins/plugin.cpp index 4866106e4a..a6d1d3ff63 100644 --- a/examples/qml/qmlextensionplugins/plugin.cpp +++ b/examples/qml/qmlextensionplugins/plugin.cpp @@ -112,6 +112,7 @@ class TimeModel : public QObject Q_OBJECT Q_PROPERTY(int hour READ hour NOTIFY timeChanged) Q_PROPERTY(int minute READ minute NOTIFY timeChanged) + QML_NAMED_ELEMENT(Time) //![0] public: @@ -157,7 +158,7 @@ public: void registerTypes(const char *uri) override { Q_ASSERT(uri == QLatin1String("TimeExample")); - qmlRegisterType<TimeModel>(uri, 1, 0, "Time"); + qmlRegisterTypesAndRevisions<TimeModel>(uri, 1); } }; //![plugin] diff --git a/examples/qml/referenceexamples/adding/main.cpp b/examples/qml/referenceexamples/adding/main.cpp index e312149da1..ffd0e90c42 100644 --- a/examples/qml/referenceexamples/adding/main.cpp +++ b/examples/qml/referenceexamples/adding/main.cpp @@ -57,7 +57,7 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); //![0] - qmlRegisterType<Person>("People", 1,0, "Person"); + qmlRegisterTypesAndRevisions<Person>("People", 1); //![0] QQmlEngine engine; @@ -70,5 +70,5 @@ int main(int argc, char ** argv) qWarning() << component.errors(); } - return 0; + return EXIT_SUCCESS; } diff --git a/examples/qml/referenceexamples/adding/person.h b/examples/qml/referenceexamples/adding/person.h index f40c8d8086..530c335dee 100644 --- a/examples/qml/referenceexamples/adding/person.h +++ b/examples/qml/referenceexamples/adding/person.h @@ -51,12 +51,15 @@ #define PERSON_H #include <QObject> +#include <QtQml/qqml.h> + //![0] class Person : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize) + QML_ELEMENT public: Person(QObject *parent = nullptr); diff --git a/examples/qml/referenceexamples/attached/birthdayparty.h b/examples/qml/referenceexamples/attached/birthdayparty.h index 15375f14d9..308d0652a8 100644 --- a/examples/qml/referenceexamples/attached/birthdayparty.h +++ b/examples/qml/referenceexamples/attached/birthdayparty.h @@ -59,6 +59,7 @@ class BirthdayPartyAttached : public QObject { Q_OBJECT Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp) + QML_ANONYMOUS public: BirthdayPartyAttached(QObject *object); @@ -75,6 +76,12 @@ class BirthdayParty : public QObject Q_PROPERTY(Person *host READ host WRITE setHost) Q_PROPERTY(QQmlListProperty<Person> guests READ guests) Q_CLASSINFO("DefaultProperty", "guests") + QML_ELEMENT + +//! [declare attached] + QML_ATTACHED(BirthdayPartyAttached) +//! [declare attached] + public: BirthdayParty(QObject *parent = nullptr); @@ -93,7 +100,4 @@ private: QList<Person *> m_guests; }; -//! [declare attached] -QML_DECLARE_TYPEINFO(BirthdayParty, QML_HAS_ATTACHED_PROPERTIES) -//! [declare attached] #endif // BIRTHDAYPARTY_H diff --git a/examples/qml/referenceexamples/attached/main.cpp b/examples/qml/referenceexamples/attached/main.cpp index 581b033dfc..ab1c6b9637 100644 --- a/examples/qml/referenceexamples/attached/main.cpp +++ b/examples/qml/referenceexamples/attached/main.cpp @@ -58,12 +58,9 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayPartyAttached>(); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<ShoeDescription>(); - qmlRegisterType<Person>(); - qmlRegisterType<Boy>("People", 1,0, "Boy"); - qmlRegisterType<Girl>("People", 1,0, "Girl"); + qmlRegisterTypesAndRevisions<BirthdayPartyAttached, + BirthdayParty, ShoeDescription, + Person, Boy, Girl>("People", 1); QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); @@ -93,9 +90,9 @@ int main(int argc, char ** argv) qWarning() << " " << guest->name() << "RSVP date:" << qPrintable(rsvpDate.toString()); } - } else { - qWarning() << component.errors(); + return EXIT_SUCCESS; } - return 0; + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/attached/person.h b/examples/qml/referenceexamples/attached/person.h index 2398da38bf..239f4405c0 100644 --- a/examples/qml/referenceexamples/attached/person.h +++ b/examples/qml/referenceexamples/attached/person.h @@ -52,6 +52,7 @@ #include <QObject> #include <QColor> +#include <QtQml/qqml.h> class ShoeDescription : public QObject { @@ -60,6 +61,7 @@ class ShoeDescription : public QObject Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(QString brand READ brand WRITE setBrand) Q_PROPERTY(qreal price READ price WRITE setPrice) + QML_ANONYMOUS public: ShoeDescription(QObject *parent = 0); @@ -86,6 +88,7 @@ class Person : public QObject Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(ShoeDescription *shoe READ shoe) + QML_ANONYMOUS public: Person(QObject *parent = nullptr); @@ -101,6 +104,7 @@ private: class Boy : public Person { Q_OBJECT + QML_ELEMENT public: Boy(QObject * parent = nullptr); }; @@ -108,6 +112,7 @@ public: class Girl : public Person { Q_OBJECT + QML_ELEMENT public: Girl(QObject * parent = nullptr); }; diff --git a/examples/qml/referenceexamples/binding/birthdayparty.h b/examples/qml/referenceexamples/binding/birthdayparty.h index 15e1908ece..3cd5cf1c9a 100644 --- a/examples/qml/referenceexamples/binding/birthdayparty.h +++ b/examples/qml/referenceexamples/binding/birthdayparty.h @@ -60,6 +60,7 @@ class BirthdayPartyAttached : public QObject { Q_OBJECT Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp NOTIFY rsvpChanged) + QML_ANONYMOUS public: BirthdayPartyAttached(QObject *object); @@ -82,6 +83,8 @@ class BirthdayParty : public QObject Q_PROPERTY(QQmlListProperty<Person> guests READ guests) Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement) Q_CLASSINFO("DefaultProperty", "guests") + QML_ELEMENT + QML_ATTACHED(BirthdayPartyAttached) public: BirthdayParty(QObject *parent = nullptr); @@ -107,6 +110,4 @@ private: QList<Person *> m_guests; }; -QML_DECLARE_TYPEINFO(BirthdayParty, QML_HAS_ATTACHED_PROPERTIES) - #endif // BIRTHDAYPARTY_H diff --git a/examples/qml/referenceexamples/binding/main.cpp b/examples/qml/referenceexamples/binding/main.cpp index 99187eba3e..8c6e3222d8 100644 --- a/examples/qml/referenceexamples/binding/main.cpp +++ b/examples/qml/referenceexamples/binding/main.cpp @@ -58,13 +58,8 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayPartyAttached>(); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<HappyBirthdaySong>("People", 1,0, "HappyBirthdaySong"); - qmlRegisterType<ShoeDescription>(); - qmlRegisterType<Person>(); - qmlRegisterType<Boy>("People", 1,0, "Boy"); - qmlRegisterType<Girl>("People", 1,0, "Girl"); + qmlRegisterTypesAndRevisions<BirthdayPartyAttached, BirthdayParty, HappyBirthdaySong, + ShoeDescription, Person, Boy, Girl>("People", 1); QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); @@ -94,9 +89,9 @@ int main(int argc, char ** argv) } party->startParty(); - } else { - qWarning() << component.errors(); + return QCoreApplication::exec(); } - return app.exec(); + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/binding/person.h b/examples/qml/referenceexamples/binding/person.h index 543b24f971..af9864950a 100644 --- a/examples/qml/referenceexamples/binding/person.h +++ b/examples/qml/referenceexamples/binding/person.h @@ -52,6 +52,7 @@ #include <QObject> #include <QColor> +#include <QtQml/qqml.h> class ShoeDescription : public QObject { @@ -60,6 +61,7 @@ class ShoeDescription : public QObject Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged) Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged) Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged) + QML_ANONYMOUS public: ShoeDescription(QObject *parent = nullptr); @@ -91,6 +93,7 @@ class Person : public QObject // ![0] Q_PROPERTY(ShoeDescription *shoe READ shoe CONSTANT) // ![0] + QML_ANONYMOUS public: Person(QObject *parent = nullptr); @@ -109,6 +112,7 @@ private: class Boy : public Person { Q_OBJECT + QML_ELEMENT public: Boy(QObject * parent = nullptr); }; @@ -116,6 +120,7 @@ public: class Girl : public Person { Q_OBJECT + QML_ELEMENT public: Girl(QObject * parent = nullptr); }; diff --git a/examples/qml/referenceexamples/coercion/main.cpp b/examples/qml/referenceexamples/coercion/main.cpp index 262cdf6320..2c2bd92e8d 100644 --- a/examples/qml/referenceexamples/coercion/main.cpp +++ b/examples/qml/referenceexamples/coercion/main.cpp @@ -58,16 +58,10 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); //![0] - qmlRegisterType<Person>(); + qmlRegisterTypesAndRevisions<BirthdayParty, Person, Boy, Girl>("People", 1); //![0] - //![register boy girl] - qmlRegisterType<Boy>("People", 1,0, "Boy"); - qmlRegisterType<Girl>("People", 1,0, "Girl"); - //![register boy girl] - QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); auto *party = qobject_cast<BirthdayParty *>(component.create()); @@ -82,9 +76,10 @@ int main(int argc, char ** argv) for (int ii = 0; ii < party->guestCount(); ++ii) qWarning() << " " << party->guest(ii)->name(); - } else { - qWarning() << component.errors(); + + return EXIT_SUCCESS; } - return 0; + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/coercion/person.h b/examples/qml/referenceexamples/coercion/person.h index 692cf4eb19..6865e0093a 100644 --- a/examples/qml/referenceexamples/coercion/person.h +++ b/examples/qml/referenceexamples/coercion/person.h @@ -51,12 +51,16 @@ #define PERSON_H #include <QObject> +#include <QtQml/qqml.h> class Person : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize) + //![0] + QML_ANONYMOUS + //![0] public: Person(QObject *parent = nullptr); @@ -75,6 +79,7 @@ private: class Boy : public Person { Q_OBJECT + QML_ELEMENT public: Boy(QObject * parent = nullptr); }; @@ -83,6 +88,7 @@ public: class Girl : public Person { Q_OBJECT + QML_ELEMENT public: Girl(QObject * parent = nullptr); }; diff --git a/examples/qml/referenceexamples/default/main.cpp b/examples/qml/referenceexamples/default/main.cpp index 017d6495cd..bbe4a239e2 100644 --- a/examples/qml/referenceexamples/default/main.cpp +++ b/examples/qml/referenceexamples/default/main.cpp @@ -58,10 +58,7 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<Person>(); - qmlRegisterType<Boy>("People", 1,0, "Boy"); - qmlRegisterType<Girl>("People", 1,0, "Girl"); + qmlRegisterTypesAndRevisions<BirthdayParty, Person, Boy, Girl>("People", 1); QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); @@ -77,9 +74,10 @@ int main(int argc, char ** argv) for (int ii = 0; ii < party->guestCount(); ++ii) qWarning() << " " << party->guest(ii)->name(); - } else { - qWarning() << component.errors(); + + return EXIT_SUCCESS; } - return 0; + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/default/person.h b/examples/qml/referenceexamples/default/person.h index 87f69276bf..361a89c599 100644 --- a/examples/qml/referenceexamples/default/person.h +++ b/examples/qml/referenceexamples/default/person.h @@ -51,12 +51,14 @@ #define PERSON_H #include <QObject> +#include <QtQml/qqml.h> class Person : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize) + QML_ANONYMOUS public: Person(QObject *parent = nullptr); @@ -73,6 +75,7 @@ private: class Boy : public Person { Q_OBJECT + QML_ELEMENT public: Boy(QObject * parent = nullptr); }; @@ -80,6 +83,7 @@ public: class Girl : public Person { Q_OBJECT + QML_ELEMENT public: Girl(QObject * parent = nullptr); }; diff --git a/examples/qml/referenceexamples/extended/main.cpp b/examples/qml/referenceexamples/extended/main.cpp index f91cec76b1..5f8582d08f 100644 --- a/examples/qml/referenceexamples/extended/main.cpp +++ b/examples/qml/referenceexamples/extended/main.cpp @@ -70,9 +70,9 @@ int main(int argc, char ** argv) if (edit) { edit->show(); - return app.exec(); - } else { - qWarning() << component.errors(); - return 0; + return QApplication::exec(); } + + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/grouped/main.cpp b/examples/qml/referenceexamples/grouped/main.cpp index 14cd64fe68..e233aab5b1 100644 --- a/examples/qml/referenceexamples/grouped/main.cpp +++ b/examples/qml/referenceexamples/grouped/main.cpp @@ -58,11 +58,7 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<ShoeDescription>(); - qmlRegisterType<Person>(); - qmlRegisterType<Boy>("People", 1,0, "Boy"); - qmlRegisterType<Girl>("People", 1,0, "Girl"); + qmlRegisterTypesAndRevisions<BirthdayParty, ShoeDescription, Person, Boy, Girl>("People", 1); QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); @@ -87,9 +83,9 @@ int main(int argc, char ** argv) if (bestShoe) qWarning() << bestShoe->name() << "is wearing the best shoes!"; - } else { - qWarning() << component.errors(); + return EXIT_SUCCESS; } - return 0; + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/grouped/person.h b/examples/qml/referenceexamples/grouped/person.h index 6f6caaee7c..df507c7386 100644 --- a/examples/qml/referenceexamples/grouped/person.h +++ b/examples/qml/referenceexamples/grouped/person.h @@ -52,6 +52,7 @@ #include <QObject> #include <QColor> +#include <QtQml/qqml.h> class ShoeDescription : public QObject { @@ -60,6 +61,7 @@ class ShoeDescription : public QObject Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(QString brand READ brand WRITE setBrand) Q_PROPERTY(qreal price READ price WRITE setPrice) + QML_ANONYMOUS public: ShoeDescription(QObject *parent = nullptr); @@ -88,6 +90,7 @@ class Person : public QObject // ![1] Q_PROPERTY(ShoeDescription *shoe READ shoe) // ![1] + QML_ANONYMOUS public: Person(QObject *parent = nullptr); @@ -103,6 +106,7 @@ private: class Boy : public Person { Q_OBJECT + QML_ELEMENT public: Boy(QObject * parent = nullptr); }; @@ -110,6 +114,7 @@ public: class Girl : public Person { Q_OBJECT + QML_ELEMENT public: Girl(QObject * parent = nullptr); }; diff --git a/examples/qml/referenceexamples/methods/main.cpp b/examples/qml/referenceexamples/methods/main.cpp index 89404ec822..4dd616f8cd 100644 --- a/examples/qml/referenceexamples/methods/main.cpp +++ b/examples/qml/referenceexamples/methods/main.cpp @@ -58,8 +58,7 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<Person>("People", 1,0, "Person"); + qmlRegisterTypesAndRevisions<BirthdayParty, Person>("People", 1); QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); @@ -70,9 +69,9 @@ int main(int argc, char ** argv) qWarning() << "They are inviting:"; for (int ii = 0; ii < party->guestCount(); ++ii) qWarning() << " " << party->guest(ii)->name(); - } else { - qWarning() << component.errors(); + return EXIT_SUCCESS; } - return 0; + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/methods/person.h b/examples/qml/referenceexamples/methods/person.h index 749109dc72..2407fbb1b9 100644 --- a/examples/qml/referenceexamples/methods/person.h +++ b/examples/qml/referenceexamples/methods/person.h @@ -51,12 +51,14 @@ #define PERSON_H #include <QObject> +#include <QtQml/qqml.h> class Person : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize) + QML_ELEMENT public: Person(QObject *parent = nullptr); diff --git a/examples/qml/referenceexamples/properties/main.cpp b/examples/qml/referenceexamples/properties/main.cpp index a0a2335034..216869bf6c 100644 --- a/examples/qml/referenceexamples/properties/main.cpp +++ b/examples/qml/referenceexamples/properties/main.cpp @@ -59,8 +59,7 @@ int main(int argc, char ** argv) QCoreApplication app(argc, argv); //![register list] - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<Person>("People", 1,0, "Person"); + qmlRegisterTypesAndRevisions<BirthdayParty, Person>("People", 1); //![register list] QQmlEngine engine; @@ -72,9 +71,9 @@ int main(int argc, char ** argv) qWarning() << "They are inviting:"; for (int ii = 0; ii < party->guestCount(); ++ii) qWarning() << " " << party->guest(ii)->name(); - } else { - qWarning() << component.errors(); + return EXIT_SUCCESS; } - return 0; + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/properties/person.h b/examples/qml/referenceexamples/properties/person.h index 749109dc72..2407fbb1b9 100644 --- a/examples/qml/referenceexamples/properties/person.h +++ b/examples/qml/referenceexamples/properties/person.h @@ -51,12 +51,14 @@ #define PERSON_H #include <QObject> +#include <QtQml/qqml.h> class Person : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize) + QML_ELEMENT public: Person(QObject *parent = nullptr); diff --git a/examples/qml/referenceexamples/signal/birthdayparty.h b/examples/qml/referenceexamples/signal/birthdayparty.h index 9aecc8929c..c815518291 100644 --- a/examples/qml/referenceexamples/signal/birthdayparty.h +++ b/examples/qml/referenceexamples/signal/birthdayparty.h @@ -59,6 +59,7 @@ class BirthdayPartyAttached : public QObject { Q_OBJECT Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp) + QML_ANONYMOUS public: BirthdayPartyAttached(QObject *object); @@ -75,6 +76,8 @@ class BirthdayParty : public QObject Q_PROPERTY(Person *host READ host WRITE setHost) Q_PROPERTY(QQmlListProperty<Person> guests READ guests) Q_CLASSINFO("DefaultProperty", "guests") + QML_ELEMENT + QML_ATTACHED(BirthdayPartyAttached) public: BirthdayParty(QObject *parent = nullptr); @@ -97,6 +100,5 @@ private: Person *m_host; QList<Person *> m_guests; }; -QML_DECLARE_TYPEINFO(BirthdayParty, QML_HAS_ATTACHED_PROPERTIES) #endif // BIRTHDAYPARTY_H diff --git a/examples/qml/referenceexamples/signal/main.cpp b/examples/qml/referenceexamples/signal/main.cpp index bb75e02bc2..f431e2bdc8 100644 --- a/examples/qml/referenceexamples/signal/main.cpp +++ b/examples/qml/referenceexamples/signal/main.cpp @@ -58,12 +58,8 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayPartyAttached>(); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<ShoeDescription>(); - qmlRegisterType<Person>(); - qmlRegisterType<Boy>("People", 1,0, "Boy"); - qmlRegisterType<Girl>("People", 1,0, "Girl"); + qmlRegisterTypesAndRevisions<BirthdayPartyAttached, BirthdayParty, ShoeDescription, + Person, Boy, Girl>("People", 1); QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); @@ -93,9 +89,9 @@ int main(int argc, char ** argv) } party->startParty(); - } else { - qWarning() << component.errors(); + return EXIT_SUCCESS; } - return 0; + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/signal/person.h b/examples/qml/referenceexamples/signal/person.h index 06d4f2eb27..7283f39f61 100644 --- a/examples/qml/referenceexamples/signal/person.h +++ b/examples/qml/referenceexamples/signal/person.h @@ -52,6 +52,7 @@ #include <QObject> #include <QColor> +#include <QtQml/qqml.h> class ShoeDescription : public QObject { @@ -60,6 +61,7 @@ class ShoeDescription : public QObject Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(QString brand READ brand WRITE setBrand) Q_PROPERTY(qreal price READ price WRITE setPrice) + QML_ANONYMOUS public: ShoeDescription(QObject *parent = nullptr); @@ -86,6 +88,7 @@ class Person : public QObject Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(ShoeDescription *shoe READ shoe) + QML_ANONYMOUS public: Person(QObject *parent = nullptr); @@ -101,6 +104,7 @@ private: class Boy : public Person { Q_OBJECT + QML_ELEMENT public: Boy(QObject * parent = nullptr); }; @@ -108,6 +112,7 @@ public: class Girl : public Person { Q_OBJECT + QML_ELEMENT public: Girl(QObject * parent = nullptr); }; diff --git a/examples/qml/referenceexamples/valuesource/birthdayparty.h b/examples/qml/referenceexamples/valuesource/birthdayparty.h index 18a9b96147..25e2342937 100644 --- a/examples/qml/referenceexamples/valuesource/birthdayparty.h +++ b/examples/qml/referenceexamples/valuesource/birthdayparty.h @@ -60,6 +60,7 @@ class BirthdayPartyAttached : public QObject { Q_OBJECT Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp) + QML_ANONYMOUS public: BirthdayPartyAttached(QObject *object); @@ -79,6 +80,8 @@ class BirthdayParty : public QObject Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement) // ![0] Q_CLASSINFO("DefaultProperty", "guests") + QML_ELEMENT + QML_ATTACHED(BirthdayPartyAttached) public: BirthdayParty(QObject *parent = nullptr); @@ -102,6 +105,5 @@ private: Person *m_host; QList<Person *> m_guests; }; -QML_DECLARE_TYPEINFO(BirthdayParty, QML_HAS_ATTACHED_PROPERTIES) #endif // BIRTHDAYPARTY_H diff --git a/examples/qml/referenceexamples/valuesource/main.cpp b/examples/qml/referenceexamples/valuesource/main.cpp index 4bef695fe2..72e75fdea1 100644 --- a/examples/qml/referenceexamples/valuesource/main.cpp +++ b/examples/qml/referenceexamples/valuesource/main.cpp @@ -59,13 +59,8 @@ int main(int argc, char ** argv) { QCoreApplication app(argc, argv); - qmlRegisterType<BirthdayPartyAttached>(); - qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty"); - qmlRegisterType<HappyBirthdaySong>("People", 1,0, "HappyBirthdaySong"); - qmlRegisterType<ShoeDescription>(); - qmlRegisterType<Person>(); - qmlRegisterType<Boy>("People", 1,0, "Boy"); - qmlRegisterType<Girl>("People", 1,0, "Girl"); + qmlRegisterTypesAndRevisions<BirthdayPartyAttached, BirthdayParty, HappyBirthdaySong, + ShoeDescription, Person, Boy, Girl>("People", 1); QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:example.qml")); @@ -95,9 +90,9 @@ int main(int argc, char ** argv) } party->startParty(); - } else { - qWarning() << component.errors(); + return QCoreApplication::exec(); } - return app.exec(); + qWarning() << component.errors(); + return EXIT_FAILURE; } diff --git a/examples/qml/referenceexamples/valuesource/person.h b/examples/qml/referenceexamples/valuesource/person.h index 06d4f2eb27..7283f39f61 100644 --- a/examples/qml/referenceexamples/valuesource/person.h +++ b/examples/qml/referenceexamples/valuesource/person.h @@ -52,6 +52,7 @@ #include <QObject> #include <QColor> +#include <QtQml/qqml.h> class ShoeDescription : public QObject { @@ -60,6 +61,7 @@ class ShoeDescription : public QObject Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(QString brand READ brand WRITE setBrand) Q_PROPERTY(qreal price READ price WRITE setPrice) + QML_ANONYMOUS public: ShoeDescription(QObject *parent = nullptr); @@ -86,6 +88,7 @@ class Person : public QObject Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(ShoeDescription *shoe READ shoe) + QML_ANONYMOUS public: Person(QObject *parent = nullptr); @@ -101,6 +104,7 @@ private: class Boy : public Person { Q_OBJECT + QML_ELEMENT public: Boy(QObject * parent = nullptr); }; @@ -108,6 +112,7 @@ public: class Girl : public Person { Q_OBJECT + QML_ELEMENT public: Girl(QObject * parent = nullptr); }; diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp b/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp index fbff60c0e6..af50cc14f2 100644 --- a/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp +++ b/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); - qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); + qmlRegisterTypesAndRevisions<PieChart>("Charts", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h b/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h index 005a706db6..687f8e2b4d 100644 --- a/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h +++ b/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h @@ -59,6 +59,7 @@ class PieChart : public QQuickPaintedItem Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(QColor color READ color WRITE setColor) + QML_ELEMENT public: PieChart(QQuickItem *parent = 0); diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp b/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp index fbff60c0e6..af50cc14f2 100644 --- a/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp +++ b/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); - qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); + qmlRegisterTypesAndRevisions<PieChart>("Charts", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h b/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h index 36bfa3ada0..271afbf653 100644 --- a/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h +++ b/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h @@ -60,7 +60,7 @@ class PieChart : public QQuickPaintedItem Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(QColor color READ color WRITE setColor) - + QML_ELEMENT //![1] public: //![1] diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp b/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp index fbff60c0e6..af50cc14f2 100644 --- a/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp +++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); - qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); + qmlRegisterTypesAndRevisions<PieChart>("Charts", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h b/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h index 9de2baa82e..58b1339298 100644 --- a/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h +++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h @@ -59,6 +59,7 @@ class PieChart : public QQuickPaintedItem //![0] Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName) + QML_ELEMENT //![1] Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp index 82355d0438..7c5d1a6885 100644 --- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp +++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp @@ -59,10 +59,8 @@ int main(int argc, char *argv[]) //![0] QGuiApplication app(argc, argv); - qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); - //![1] - qmlRegisterType<PieSlice>("Charts", 1, 0, "PieSlice"); + qmlRegisterTypesAndRevisions<PieChart, PieSlice>("Charts", 1); //![1] QQuickView view; diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h index 6cd09a9293..b762ce1c49 100644 --- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h +++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h @@ -61,7 +61,7 @@ class PieChart : public QQuickItem Q_PROPERTY(PieSlice* pieSlice READ pieSlice WRITE setPieSlice) //![0] Q_PROPERTY(QString name READ name WRITE setName) - + QML_ELEMENT //![1] public: //![1] diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h index 10ab4d34b6..6e64917851 100644 --- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h +++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h @@ -58,6 +58,7 @@ class PieSlice : public QQuickPaintedItem { Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor) + QML_ELEMENT public: PieSlice(QQuickItem *parent = 0); diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp b/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp index 8aa6fef018..70ef103e4d 100644 --- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp +++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp @@ -57,8 +57,7 @@ int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); - qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); - qmlRegisterType<PieSlice>("Charts", 1, 0, "PieSlice"); + qmlRegisterTypesAndRevisions<PieChart, PieSlice>("Charts", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h b/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h index 9b3390b902..236fa6796f 100644 --- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h +++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h @@ -61,6 +61,7 @@ class PieChart : public QQuickItem Q_PROPERTY(QQmlListProperty<PieSlice> slices READ slices) //![0] Q_PROPERTY(QString name READ name WRITE setName) + QML_ELEMENT //![1] public: diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h b/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h index f8f7f7c36a..0b290851f0 100644 --- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h +++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h @@ -60,6 +60,7 @@ class PieSlice : public QQuickPaintedItem Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle) Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan) + QML_ELEMENT //![0] public: diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.cpp b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.cpp index ce8b95b6b6..74d382ec57 100644 --- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.cpp +++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.cpp @@ -55,8 +55,7 @@ void ChartsPlugin::registerTypes(const char *uri) { - qmlRegisterType<PieChart>(uri, 1, 0, "PieChart"); - qmlRegisterType<PieSlice>(uri, 1, 0, "PieSlice"); + qmlRegisterTypesAndRevisions<PieChart, PieSlice>(uri, 1); } //![0] diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h index cd67bdf34a..e6b768b274 100644 --- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h +++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h @@ -59,6 +59,7 @@ class PieChart : public QQuickItem Q_OBJECT Q_PROPERTY(QQmlListProperty<PieSlice> slices READ slices) Q_PROPERTY(QString name READ name WRITE setName) + QML_ELEMENT public: PieChart(QQuickItem *parent = 0); diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h index 71cc20a369..091870bd51 100644 --- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h +++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h @@ -59,6 +59,7 @@ class PieSlice : public QQuickPaintedItem Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle) Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan) + QML_ELEMENT public: PieSlice(QQuickItem *parent = 0); diff --git a/examples/qml/xmlhttprequest/Get.qml b/examples/qml/xmlhttprequest/Get.qml index 1a35d32666..96cec2a99d 100644 --- a/examples/qml/xmlhttprequest/Get.qml +++ b/examples/qml/xmlhttprequest/Get.qml @@ -58,7 +58,7 @@ GetForm mouseArea.onClicked: Utils.makeRequest() - button.border.width: button.pressed ? 2 : 1 + button.border.width: mouseArea.pressed ? 2 : 1 text.text: "Request data.xml" } diff --git a/examples/quick/animation/animation.qrc b/examples/quick/animation/animation.qrc index d4e78c82f0..2d88c03007 100644 --- a/examples/quick/animation/animation.qrc +++ b/examples/quick/animation/animation.qrc @@ -9,6 +9,7 @@ <file>basics/color-animation.qml</file> <file>basics/property-animation.qml</file> <file>behaviors/behavior-example.qml</file> + <file>behaviors/FocusRect.qml</file> <file>behaviors/SideRect.qml</file> <file>behaviors/tvtennis.qml</file> <file>behaviors/wigglytext.qml</file> diff --git a/examples/quick/animation/behaviors/FocusRect.qml b/examples/quick/animation/behaviors/FocusRect.qml new file mode 100644 index 0000000000..5188919606 --- /dev/null +++ b/examples/quick/animation/behaviors/FocusRect.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: focusRect + property string text + + x: 62 + y: 75 + width: 75 + height: 50 + radius: 6 + border.width: 4 + border.color: "white" + color: "firebrick" + + // Set an 'elastic' behavior on the focusRect's x property. + Behavior on x { + NumberAnimation { + easing.type: Easing.OutElastic + easing.amplitude: 3.0 + easing.period: 2.0 + duration: 300 + } + } + + //! [0] + // Set an 'elastic' behavior on the focusRect's y property. + Behavior on y { + NumberAnimation { + easing.type: Easing.OutElastic + easing.amplitude: 3.0 + easing.period: 2.0 + duration: 300 + } + } + //! [0] + + Text { + id: focusText + text: focusRect.text + anchors.centerIn: parent + color: "white" + font.pixelSize: 16 + font.bold: true + + // Set a behavior on the focusText's x property: + // Set the opacity to 0, set the new text value, then set the opacity back to 1. + Behavior on text { + SequentialAnimation { + NumberAnimation { + target: focusText + property: "opacity" + to: 0 + duration: 150 + } + NumberAnimation { + target: focusText + property: "opacity" + to: 1 + duration: 150 + } + } + } + } +} diff --git a/examples/quick/animation/behaviors/SideRect.qml b/examples/quick/animation/behaviors/SideRect.qml index 8b37a6a0ca..19c0528054 100644 --- a/examples/quick/animation/behaviors/SideRect.qml +++ b/examples/quick/animation/behaviors/SideRect.qml @@ -53,6 +53,7 @@ import QtQuick 2.0 Rectangle { id: myRect + property FocusRect focusItem property string text width: 75; height: 50 @@ -64,9 +65,9 @@ Rectangle { anchors.fill: parent hoverEnabled: true onEntered: { - focusRect.x = myRect.x; - focusRect.y = myRect.y; - focusRect.text = myRect.text; + myRect.focusItem.x = myRect.x; + myRect.focusItem.y = myRect.y; + myRect.focusItem.text = myRect.text; } } } diff --git a/examples/quick/animation/behaviors/behavior-example.qml b/examples/quick/animation/behaviors/behavior-example.qml index 1d07e6bb90..43ca31f185 100644 --- a/examples/quick/animation/behaviors/behavior-example.qml +++ b/examples/quick/animation/behaviors/behavior-example.qml @@ -64,67 +64,34 @@ Rectangle { SideRect { id: leftRect + focusItem: focusRect anchors { verticalCenter: parent.verticalCenter; horizontalCenter: parent.left } text: "Left" } SideRect { id: rightRect + focusItem: focusRect anchors { verticalCenter: parent.verticalCenter; horizontalCenter: parent.right } text: "Right" } SideRect { id: topRect + focusItem: focusRect anchors { verticalCenter: parent.top; horizontalCenter: parent.horizontalCenter } text: "Top" } SideRect { id: bottomRect + focusItem: focusRect anchors { verticalCenter: parent.bottom; horizontalCenter: parent.horizontalCenter } text: "Bottom" } - - Rectangle { + FocusRect { id: focusRect - - property string text - - x: 62; y: 75; width: 75; height: 50 - radius: 6 - border.width: 4; border.color: "white" - color: "firebrick" - - // Set an 'elastic' behavior on the focusRect's x property. - Behavior on x { - NumberAnimation { easing.type: Easing.OutElastic; easing.amplitude: 3.0; easing.period: 2.0; duration: 300 } - } - - //! [0] - // Set an 'elastic' behavior on the focusRect's y property. - Behavior on y { - NumberAnimation { easing.type: Easing.OutElastic; easing.amplitude: 3.0; easing.period: 2.0; duration: 300 } - } - //! [0] - - Text { - id: focusText - text: focusRect.text - anchors.centerIn: parent - color: "white" - font.pixelSize: 16; font.bold: true - - // Set a behavior on the focusText's x property: - // Set the opacity to 0, set the new text value, then set the opacity back to 1. - Behavior on text { - SequentialAnimation { - NumberAnimation { target: focusText; property: "opacity"; to: 0; duration: 150 } - NumberAnimation { target: focusText; property: "opacity"; to: 1; duration: 150 } - } - } - } } } } diff --git a/examples/quick/animation/doc/src/animation.qdoc b/examples/quick/animation/doc/src/animation.qdoc index 578fb4b849..97a574d768 100644 --- a/examples/quick/animation/doc/src/animation.qdoc +++ b/examples/quick/animation/doc/src/animation.qdoc @@ -60,7 +60,7 @@ \section1 Behaviors \e Behaviors uses behaviors to move a rectangle to where you click. - \snippet animation/behaviors/behavior-example.qml 0 + \snippet animation/behaviors/FocusRect.qml 0 \section1 Wiggly Text diff --git a/examples/quick/canvas/smile/smile.qml b/examples/quick/canvas/smile/smile.qml index 880116726f..cde18d4d38 100644 --- a/examples/quick/canvas/smile/smile.qml +++ b/examples/quick/canvas/smile/smile.qml @@ -97,7 +97,6 @@ Item { ctx.save(); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.translate(originX, originX); - ctx.globalAlpha = canvas.alpha; ctx.strokeStyle = canvas.strokeStyle; ctx.fillStyle = canvas.fillStyle; ctx.lineWidth = canvas.lineWidth; diff --git a/examples/quick/customitems/maskedmousearea/main.cpp b/examples/quick/customitems/maskedmousearea/main.cpp index 63558d1b20..626f0fd765 100644 --- a/examples/quick/customitems/maskedmousearea/main.cpp +++ b/examples/quick/customitems/maskedmousearea/main.cpp @@ -59,7 +59,7 @@ int main(int argc, char* argv[]) QGuiApplication app(argc,argv); QQuickView view; - qmlRegisterType<MaskedMouseArea>("Example", 1, 0, "MaskedMouseArea"); + qmlRegisterTypesAndRevisions<MaskedMouseArea>("Example", 1); view.setSource(QUrl("qrc:///customitems/maskedmousearea/maskedmousearea.qml")); view.show(); diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.h b/examples/quick/customitems/maskedmousearea/maskedmousearea.h index 28ff6ca9df..39d78a019a 100644 --- a/examples/quick/customitems/maskedmousearea/maskedmousearea.h +++ b/examples/quick/customitems/maskedmousearea/maskedmousearea.h @@ -62,6 +62,7 @@ class MaskedMouseArea : public QQuickItem Q_PROPERTY(bool containsMouse READ containsMouse NOTIFY containsMouseChanged) Q_PROPERTY(QUrl maskSource READ maskSource WRITE setMaskSource NOTIFY maskSourceChanged) Q_PROPERTY(qreal alphaThreshold READ alphaThreshold WRITE setAlphaThreshold NOTIFY alphaThresholdChanged) + QML_ELEMENT public: MaskedMouseArea(QQuickItem *parent = 0); diff --git a/examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h b/examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h index d3a1f4ba91..41750d1647 100644 --- a/examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h +++ b/examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h @@ -59,6 +59,6 @@ class TextBalloonPlugin : public QQmlExtensionPlugin public: void registerTypes(const char *uri) { - qmlRegisterType<TextBalloon>(uri, 1, 0, "TextBalloon"); + qmlRegisterTypesAndRevisions<TextBalloon>(uri, 1); } }; diff --git a/examples/quick/customitems/painteditem/textballoon.h b/examples/quick/customitems/painteditem/textballoon.h index 81b3e2961d..eb72804602 100644 --- a/examples/quick/customitems/painteditem/textballoon.h +++ b/examples/quick/customitems/painteditem/textballoon.h @@ -58,6 +58,7 @@ class TextBalloon : public QQuickPaintedItem { Q_OBJECT Q_PROPERTY(bool rightAligned READ isRightAligned WRITE setRightAligned NOTIFY rightAlignedChanged) + QML_ELEMENT public: TextBalloon(QQuickItem *parent = 0); diff --git a/examples/quick/quick-accessibility/content/Button.qml b/examples/quick/quick-accessibility/content/Button.qml index fc9c19b789..7a86e31588 100644 --- a/examples/quick/quick-accessibility/content/Button.qml +++ b/examples/quick/quick-accessibility/content/Button.qml @@ -79,7 +79,6 @@ Rectangle { Text { id: buttonText - text: parent.description anchors.centerIn: parent font.pixelSize: parent.height * .5 style: Text.Sunken diff --git a/examples/quick/quickwidgets/qquickviewcomparison/fbitem.h b/examples/quick/quickwidgets/qquickviewcomparison/fbitem.h index 3a4c5a13c2..6270e7adff 100644 --- a/examples/quick/quickwidgets/qquickviewcomparison/fbitem.h +++ b/examples/quick/quickwidgets/qquickviewcomparison/fbitem.h @@ -111,6 +111,7 @@ class FbItem : public QQuickFramebufferObject Q_PROPERTY(QVector3D target READ target WRITE setTarget) Q_PROPERTY(QVector3D rotation READ rotation WRITE setRotation) Q_PROPERTY(bool multisample READ multisample WRITE setMultisample) + QML_ELEMENT public: explicit FbItem(QQuickItem *parent = 0); diff --git a/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp b/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp index 84e116dce6..6ebf36c454 100644 --- a/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp +++ b/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp @@ -86,7 +86,7 @@ MainWindow::MainWindow(bool transparency, bool noRenderAlpha) m_labelStatus = new QLabel; layout->addWidget(m_labelStatus); - qmlRegisterType<FbItem>("fbitem", 1, 0, "FbItem"); + qmlRegisterTypesAndRevisions<FbItem>("fbitem", 1); QWidget *quickContainer = new QWidget; layout->addWidget(quickContainer); diff --git a/examples/quick/quickwidgets/quickwidget/fbitem.h b/examples/quick/quickwidgets/quickwidget/fbitem.h index 7beb9874a5..c1fb866c9a 100644 --- a/examples/quick/quickwidgets/quickwidget/fbitem.h +++ b/examples/quick/quickwidgets/quickwidget/fbitem.h @@ -56,6 +56,7 @@ class FbItem : public QQuickFramebufferObject { Q_OBJECT + QML_ELEMENT public: Renderer *createRenderer() const; }; diff --git a/examples/quick/quickwidgets/quickwidget/main.cpp b/examples/quick/quickwidgets/quickwidget/main.cpp index c54586c5de..541f543f07 100644 --- a/examples/quick/quickwidgets/quickwidget/main.cpp +++ b/examples/quick/quickwidgets/quickwidget/main.cpp @@ -214,7 +214,7 @@ int main(int argc, char **argv) optMultipleSample = parser.isSet(multipleSampleOption); optCoreProfile = parser.isSet(coreProfileOption); - qmlRegisterType<FbItem>("QuickWidgetExample", 1, 0, "FbItem"); + qmlRegisterTypesAndRevisions<FbItem>("QuickWidgetExample", 1); MainWindow mainWindow; mainWindow.show(); diff --git a/examples/quick/scenegraph/customgeometry/beziercurve.h b/examples/quick/scenegraph/customgeometry/beziercurve.h index f2f7832e6d..be9e4ef49f 100644 --- a/examples/quick/scenegraph/customgeometry/beziercurve.h +++ b/examples/quick/scenegraph/customgeometry/beziercurve.h @@ -64,6 +64,7 @@ class BezierCurve : public QQuickItem Q_PROPERTY(QPointF p4 READ p4 WRITE setP4 NOTIFY p4Changed) Q_PROPERTY(int segmentCount READ segmentCount WRITE setSegmentCount NOTIFY segmentCountChanged) + QML_ELEMENT public: BezierCurve(QQuickItem *parent = 0); diff --git a/examples/quick/scenegraph/customgeometry/main.cpp b/examples/quick/scenegraph/customgeometry/main.cpp index 6f3c24e87b..9352e4bd24 100644 --- a/examples/quick/scenegraph/customgeometry/main.cpp +++ b/examples/quick/scenegraph/customgeometry/main.cpp @@ -58,7 +58,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<BezierCurve>("CustomGeometry", 1, 0, "BezierCurve"); + qmlRegisterTypesAndRevisions<BezierCurve>("CustomGeometry", 1); QQuickView view; QSurfaceFormat format = view.format(); diff --git a/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h b/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h index be9aadc43b..4be3671d1c 100644 --- a/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h +++ b/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h @@ -59,6 +59,7 @@ class D3D11Squircle : public QQuickItem { Q_OBJECT Q_PROPERTY(qreal t READ t WRITE setT NOTIFY tChanged) + QML_ELEMENT public: D3D11Squircle(); diff --git a/examples/quick/scenegraph/d3d11underqml/main.cpp b/examples/quick/scenegraph/d3d11underqml/main.cpp index d26de1144a..dcab8c879c 100644 --- a/examples/quick/scenegraph/d3d11underqml/main.cpp +++ b/examples/quick/scenegraph/d3d11underqml/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<D3D11Squircle>("D3D11UnderQML", 1, 0, "D3D11Squircle"); + qmlRegisterTypesAndRevisions<D3D11Squircle>("D3D11UnderQML", 1); QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Direct3D11Rhi); diff --git a/examples/quick/scenegraph/fboitem/fboinsgrenderer.h b/examples/quick/scenegraph/fboitem/fboinsgrenderer.h index e1a9ce22c8..1b92b56851 100644 --- a/examples/quick/scenegraph/fboitem/fboinsgrenderer.h +++ b/examples/quick/scenegraph/fboitem/fboinsgrenderer.h @@ -58,6 +58,7 @@ class LogoRenderer; class FboInSGRenderer : public QQuickFramebufferObject { Q_OBJECT + QML_NAMED_ELEMENT(Renderer) public: Renderer *createRenderer() const; }; diff --git a/examples/quick/scenegraph/fboitem/fboitem.qrc b/examples/quick/scenegraph/fboitem/fboitem.qrc index 9d9db70654..eeb5c36afd 100644 --- a/examples/quick/scenegraph/fboitem/fboitem.qrc +++ b/examples/quick/scenegraph/fboitem/fboitem.qrc @@ -1,5 +1,7 @@ <RCC> <qresource prefix="/scenegraph/fboitem"> <file>main.qml</file> + <file>shaders/checker.frag</file> + <file>shaders/+qsb/checker.frag</file> </qresource> </RCC> diff --git a/examples/quick/scenegraph/fboitem/main.cpp b/examples/quick/scenegraph/fboitem/main.cpp index 429224ba95..056bf24ade 100644 --- a/examples/quick/scenegraph/fboitem/main.cpp +++ b/examples/quick/scenegraph/fboitem/main.cpp @@ -58,7 +58,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<FboInSGRenderer>("SceneGraphRendering", 1, 0, "Renderer"); + qmlRegisterTypesAndRevisions<FboInSGRenderer>("SceneGraphRendering", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/quick/scenegraph/fboitem/main.qml b/examples/quick/scenegraph/fboitem/main.qml index 92fa99e847..1f1829deda 100644 --- a/examples/quick/scenegraph/fboitem/main.qml +++ b/examples/quick/scenegraph/fboitem/main.qml @@ -67,20 +67,7 @@ Item { property size pixelSize: Qt.size(width / tileSize, height / tileSize); - fragmentShader: - " - uniform lowp vec4 color1; - uniform lowp vec4 color2; - uniform highp vec2 pixelSize; - varying highp vec2 qt_TexCoord0; - void main() { - highp vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * pixelSize)); - if (tc.x != tc.y) - gl_FragColor = color1; - else - gl_FragColor = color2; - } - " + fragmentShader: "qrc:/scenegraph/fboitem/shaders/checker.frag" } Renderer { diff --git a/examples/quick/scenegraph/fboitem/shaders/+qsb/checker.frag b/examples/quick/scenegraph/fboitem/shaders/+qsb/checker.frag Binary files differnew file mode 100644 index 0000000000..5037899d19 --- /dev/null +++ b/examples/quick/scenegraph/fboitem/shaders/+qsb/checker.frag diff --git a/examples/quick/scenegraph/fboitem/shaders/checker.frag b/examples/quick/scenegraph/fboitem/shaders/checker.frag new file mode 100644 index 0000000000..044b3bad58 --- /dev/null +++ b/examples/quick/scenegraph/fboitem/shaders/checker.frag @@ -0,0 +1,14 @@ +uniform lowp vec4 color1; +uniform lowp vec4 color2; +uniform highp vec2 pixelSize; + +varying highp vec2 qt_TexCoord0; + +void main() +{ + highp vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * pixelSize)); + if (tc.x != tc.y) + gl_FragColor = color1; + else + gl_FragColor = color2; +} diff --git a/examples/quick/scenegraph/fboitem/shaders/checker_rhi.frag b/examples/quick/scenegraph/fboitem/shaders/checker_rhi.frag new file mode 100644 index 0000000000..1e4131d026 --- /dev/null +++ b/examples/quick/scenegraph/fboitem/shaders/checker_rhi.frag @@ -0,0 +1,22 @@ +#version 440 + +layout(std140, binding = 0) uniform buf { + mat4 qt_Matrix; + float qt_Opacity; + + vec4 color1; + vec4 color2; + vec2 pixelSize; +} ubuf; + +layout(location = 0) in vec2 qt_TexCoord0; +layout(location = 0) out vec4 fragColor; + +void main() +{ + vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * ubuf.pixelSize)); + if (tc.x != tc.y) + fragColor = ubuf.color1; + else + fragColor = ubuf.color2; +} diff --git a/examples/quick/scenegraph/graph/graph.h b/examples/quick/scenegraph/graph/graph.h index a1a00cb6dc..e32e657e0e 100644 --- a/examples/quick/scenegraph/graph/graph.h +++ b/examples/quick/scenegraph/graph/graph.h @@ -56,6 +56,7 @@ class Graph : public QQuickItem { Q_OBJECT + QML_ELEMENT public: Graph(); diff --git a/examples/quick/scenegraph/graph/main.cpp b/examples/quick/scenegraph/graph/main.cpp index 2406457ab5..9a575944b9 100644 --- a/examples/quick/scenegraph/graph/main.cpp +++ b/examples/quick/scenegraph/graph/main.cpp @@ -58,7 +58,7 @@ int main(int argc, char *argv[]) { QGuiApplication a(argc, argv); - qmlRegisterType<Graph>("Graph", 1, 0, "Graph"); + qmlRegisterTypesAndRevisions<Graph>("Graph", 1); QQuickView view; view.resize(800, 400); diff --git a/examples/quick/scenegraph/metalunderqml/main.cpp b/examples/quick/scenegraph/metalunderqml/main.cpp index 5ad337abb1..3e620137cd 100644 --- a/examples/quick/scenegraph/metalunderqml/main.cpp +++ b/examples/quick/scenegraph/metalunderqml/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<MetalSquircle>("MetalUnderQML", 1, 0, "MetalSquircle"); + qmlRegisterTypesAndRevisions<MetalSquircle>("MetalUnderQML", 1); QQuickWindow::setSceneGraphBackend(QSGRendererInterface::MetalRhi); diff --git a/examples/quick/scenegraph/metalunderqml/metalsquircle.h b/examples/quick/scenegraph/metalunderqml/metalsquircle.h index 43c4afad21..18db7d45f3 100644 --- a/examples/quick/scenegraph/metalunderqml/metalsquircle.h +++ b/examples/quick/scenegraph/metalunderqml/metalsquircle.h @@ -59,6 +59,7 @@ class MetalSquircle : public QQuickItem { Q_OBJECT Q_PROPERTY(qreal t READ t WRITE setT NOTIFY tChanged) + QML_ELEMENT public: MetalSquircle(); diff --git a/examples/quick/scenegraph/openglunderqml/main.cpp b/examples/quick/scenegraph/openglunderqml/main.cpp index 022d6a75bb..c04d0da68f 100644 --- a/examples/quick/scenegraph/openglunderqml/main.cpp +++ b/examples/quick/scenegraph/openglunderqml/main.cpp @@ -59,7 +59,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<Squircle>("OpenGLUnderQML", 1, 0, "Squircle"); + qmlRegisterTypesAndRevisions<Squircle>("OpenGLUnderQML", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/quick/scenegraph/openglunderqml/squircle.h b/examples/quick/scenegraph/openglunderqml/squircle.h index 1b9995bc1e..c24fdd50c2 100644 --- a/examples/quick/scenegraph/openglunderqml/squircle.h +++ b/examples/quick/scenegraph/openglunderqml/squircle.h @@ -86,6 +86,7 @@ class Squircle : public QQuickItem { Q_OBJECT Q_PROPERTY(qreal t READ t WRITE setT NOTIFY tChanged) + QML_ELEMENT public: Squircle(); diff --git a/examples/quick/scenegraph/rendernode/customrenderitem.h b/examples/quick/scenegraph/rendernode/customrenderitem.h index a0ac3468e4..74115b2505 100644 --- a/examples/quick/scenegraph/rendernode/customrenderitem.h +++ b/examples/quick/scenegraph/rendernode/customrenderitem.h @@ -56,6 +56,7 @@ class CustomRenderItem : public QQuickItem { Q_OBJECT + QML_ELEMENT public: CustomRenderItem(QQuickItem *parent = nullptr); diff --git a/examples/quick/scenegraph/rendernode/main.cpp b/examples/quick/scenegraph/rendernode/main.cpp index 146d787e50..b1dfe47829 100644 --- a/examples/quick/scenegraph/rendernode/main.cpp +++ b/examples/quick/scenegraph/rendernode/main.cpp @@ -59,7 +59,7 @@ int main(int argc, char **argv) QGuiApplication app(argc, argv); //! [1] - qmlRegisterType<CustomRenderItem>("SceneGraphRendering", 2, 0, "CustomRenderItem"); + qmlRegisterTypesAndRevisions<CustomRenderItem>("SceneGraphRendering", 2); //! [1] QQuickView view; diff --git a/examples/quick/scenegraph/simplematerial/simplematerial.cpp b/examples/quick/scenegraph/simplematerial/simplematerial.cpp index 6773b6fb5a..55e1d879ca 100644 --- a/examples/quick/scenegraph/simplematerial/simplematerial.cpp +++ b/examples/quick/scenegraph/simplematerial/simplematerial.cpp @@ -157,6 +157,7 @@ class Item : public QQuickItem Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) + QML_NAMED_ELEMENT(SimpleMaterialItem) public: @@ -203,7 +204,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<Item>("SimpleMaterial", 1, 0, "SimpleMaterialItem"); + qmlRegisterTypesAndRevisions<Item>("SimpleMaterial", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/quick/scenegraph/textureinthread/main.cpp b/examples/quick/scenegraph/textureinthread/main.cpp index 7a46f25390..7c22fa7fdf 100644 --- a/examples/quick/scenegraph/textureinthread/main.cpp +++ b/examples/quick/scenegraph/textureinthread/main.cpp @@ -70,7 +70,7 @@ int main(int argc, char **argv) return app.exec(); } - qmlRegisterType<ThreadRenderer>("SceneGraphRendering", 1, 0, "Renderer"); + qmlRegisterTypesAndRevisions<ThreadRenderer>("SceneGraphRendering", 1); int execReturn = 0; { diff --git a/examples/quick/scenegraph/textureinthread/threadrenderer.h b/examples/quick/scenegraph/textureinthread/threadrenderer.h index 8442041bf8..96c00e7b2e 100644 --- a/examples/quick/scenegraph/textureinthread/threadrenderer.h +++ b/examples/quick/scenegraph/textureinthread/threadrenderer.h @@ -58,6 +58,7 @@ class RenderThread; class ThreadRenderer : public QQuickItem { Q_OBJECT + QML_NAMED_ELEMENT(Renderer) public: ThreadRenderer(); diff --git a/examples/quick/scenegraph/threadedanimation/main.cpp b/examples/quick/scenegraph/threadedanimation/main.cpp index b1b0c05085..c77a291f5d 100644 --- a/examples/quick/scenegraph/threadedanimation/main.cpp +++ b/examples/quick/scenegraph/threadedanimation/main.cpp @@ -57,7 +57,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<Spinner>("Spinner", 1, 0, "Spinner"); + qmlRegisterTypesAndRevisions<Spinner>("Spinner", 1); QQuickView view; view.setSource(QUrl("qrc:///scenegraph/threadedanimation/main.qml")); diff --git a/examples/quick/scenegraph/threadedanimation/spinner.h b/examples/quick/scenegraph/threadedanimation/spinner.h index c3f3394c93..fd3eaa7751 100644 --- a/examples/quick/scenegraph/threadedanimation/spinner.h +++ b/examples/quick/scenegraph/threadedanimation/spinner.h @@ -58,6 +58,7 @@ class Spinner : public QQuickItem Q_OBJECT Q_PROPERTY(bool spinning READ spinning WRITE setSpinning NOTIFY spinningChanged) + QML_ELEMENT public: Spinner(); diff --git a/examples/quick/scenegraph/twotextureproviders/main.cpp b/examples/quick/scenegraph/twotextureproviders/main.cpp index a5d23b6adc..3f53bb6e32 100644 --- a/examples/quick/scenegraph/twotextureproviders/main.cpp +++ b/examples/quick/scenegraph/twotextureproviders/main.cpp @@ -58,7 +58,7 @@ int main(int argc, char **argv) { QGuiApplication app(argc, argv); - qmlRegisterType<XorBlender>("SceneGraphRendering", 1, 0, "XorBlender"); + qmlRegisterTypesAndRevisions<XorBlender>("SceneGraphRendering", 1); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/examples/quick/scenegraph/twotextureproviders/main.qml b/examples/quick/scenegraph/twotextureproviders/main.qml index 296df766a1..b9e516f4b7 100644 --- a/examples/quick/scenegraph/twotextureproviders/main.qml +++ b/examples/quick/scenegraph/twotextureproviders/main.qml @@ -64,20 +64,9 @@ Item { property size pixelSize: Qt.size(width / tileSize, height / tileSize); - fragmentShader: - " - uniform lowp vec4 color1; - uniform lowp vec4 color2; - uniform highp vec2 pixelSize; - varying highp vec2 qt_TexCoord0; - void main() { - highp vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * pixelSize)); - if (tc.x != tc.y) - gl_FragColor = color1; - else - gl_FragColor = color2; - } - " + // Will automatically pick either checker.frag or +qsb/checker.frag + // thanks to file selectors. + fragmentShader: "qrc:/scenegraph/twotextureproviders/shaders/checker.frag" } width: 320 diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/checker.frag b/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/checker.frag Binary files differnew file mode 100644 index 0000000000..edcfad488b --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/checker.frag diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/xorblender.frag b/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/xorblender.frag Binary files differnew file mode 100644 index 0000000000..7a5280ba08 --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/xorblender.frag diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/xorblender.vert b/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/xorblender.vert Binary files differnew file mode 100644 index 0000000000..d643c7be6a --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/+qsb/xorblender.vert diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/checker.frag b/examples/quick/scenegraph/twotextureproviders/shaders/checker.frag new file mode 100644 index 0000000000..044b3bad58 --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/checker.frag @@ -0,0 +1,14 @@ +uniform lowp vec4 color1; +uniform lowp vec4 color2; +uniform highp vec2 pixelSize; + +varying highp vec2 qt_TexCoord0; + +void main() +{ + highp vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * pixelSize)); + if (tc.x != tc.y) + gl_FragColor = color1; + else + gl_FragColor = color2; +} diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/checker_rhi.frag b/examples/quick/scenegraph/twotextureproviders/shaders/checker_rhi.frag new file mode 100644 index 0000000000..0932bc8c37 --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/checker_rhi.frag @@ -0,0 +1,25 @@ +#version 440 + +layout(location = 0) in vec2 qt_TexCoord0; + +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + // preamble as required by ShaderEffect + mat4 qt_Matrix; + float qt_Opacity; + + // our custom members, connected automatically to QML object properties + vec4 color1; + vec4 color2; + vec2 pixelSize; +} ubuf; + +void main() +{ + vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * ubuf.pixelSize)); + if (tc.x != tc.y) + fragColor = ubuf.color1; + else + fragColor = ubuf.color2; +} diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag new file mode 100644 index 0000000000..f67735312d --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag @@ -0,0 +1,12 @@ +uniform lowp float qt_Opacity; +uniform lowp sampler2D uSource1; +uniform lowp sampler2D uSource2; + +varying highp vec2 vTexCoord; + +void main() +{ + lowp vec4 p1 = texture2D(uSource1, vTexCoord); + lowp vec4 p2 = texture2D(uSource2, vTexCoord); + gl_FragColor = (p1 * (1.0 - p2.a) + p2 * (1.0 - p1.a)) * qt_Opacity; +} diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.vert b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.vert new file mode 100644 index 0000000000..ac9f1364d6 --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.vert @@ -0,0 +1,12 @@ +attribute highp vec4 aVertex; +attribute highp vec2 aTexCoord; + +uniform highp mat4 qt_Matrix; + +varying highp vec2 vTexCoord; + +void main() +{ + gl_Position = qt_Matrix * aVertex; + vTexCoord = aTexCoord; +} diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/xorblender_rhi.frag b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender_rhi.frag new file mode 100644 index 0000000000..bc68160c1f --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender_rhi.frag @@ -0,0 +1,20 @@ +#version 440 + +layout(location = 0) in vec2 vTexCoord; + +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 qt_Matrix; + float qt_Opacity; +} ubuf; + +layout(binding = 1) uniform sampler2D uSource1; +layout(binding = 2) uniform sampler2D uSource2; + +void main() +{ + lowp vec4 p1 = texture(uSource1, vTexCoord); + lowp vec4 p2 = texture(uSource2, vTexCoord); + fragColor = (p1 * (1.0 - p2.a) + p2 * (1.0 - p1.a)) * ubuf.qt_Opacity; +} diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/xorblender_rhi.vert b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender_rhi.vert new file mode 100644 index 0000000000..41000bde04 --- /dev/null +++ b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender_rhi.vert @@ -0,0 +1,19 @@ +#version 440 + +layout(location = 0) in vec4 aVertex; +layout(location = 1) in vec2 aTexCoord; + +layout(location = 0) out vec2 vTexCoord; + +layout(std140, binding = 0) uniform buf { + mat4 qt_Matrix; + float qt_Opacity; +} ubuf; + +out gl_PerVertex { vec4 gl_Position; }; + +void main() +{ + gl_Position = ubuf.qt_Matrix * aVertex; + vTexCoord = aTexCoord; +} diff --git a/examples/quick/scenegraph/twotextureproviders/twotextureproviders.qrc b/examples/quick/scenegraph/twotextureproviders/twotextureproviders.qrc index 1424333ce5..8022a77a1e 100644 --- a/examples/quick/scenegraph/twotextureproviders/twotextureproviders.qrc +++ b/examples/quick/scenegraph/twotextureproviders/twotextureproviders.qrc @@ -1,5 +1,13 @@ <RCC> <qresource prefix="/scenegraph/twotextureproviders"> <file>main.qml</file> + + <file>shaders/checker.frag</file> + <file>shaders/xorblender.vert</file> + <file>shaders/xorblender.frag</file> + + <file>shaders/+qsb/checker.frag</file> + <file>shaders/+qsb/xorblender.vert</file> + <file>shaders/+qsb/xorblender.frag</file> </qresource> </RCC> diff --git a/examples/quick/scenegraph/twotextureproviders/xorblender.cpp b/examples/quick/scenegraph/twotextureproviders/xorblender.cpp index 8d7597addf..d5881b9adc 100644 --- a/examples/quick/scenegraph/twotextureproviders/xorblender.cpp +++ b/examples/quick/scenegraph/twotextureproviders/xorblender.cpp @@ -55,7 +55,7 @@ #include <QtGui/QOpenGLContext> #include <QtGui/QOpenGLFunctions> -#include <QtQuick/QSGSimpleMaterial> +#include <QtQuick/QSGMaterial> #include <QtQuick/QSGTexture> #include <QtQuick/QSGGeometryNode> #include <QtQuick/QSGTextureProvider> @@ -67,64 +67,170 @@ * a custom material. */ -struct XorBlendState { - QSGTexture *texture1; - QSGTexture *texture2; +class XorBlendMaterial : public QSGMaterial +{ +public: + XorBlendMaterial(); + QSGMaterialType *type() const override; + QSGMaterialShader *createShader() const override; + int compare(const QSGMaterial *other) const override; + + struct { + QSGTexture *texture1 = nullptr; + QSGTexture *texture2 = nullptr; + } state; }; -class XorBlendShader : public QSGSimpleMaterialShader<XorBlendState> +class XorBlendShader : public QSGMaterialShader // for when the scenegraph is using OpenGL directly { - QSG_DECLARE_SIMPLE_SHADER(XorBlendShader, XorBlendState) public: + XorBlendShader(); + void initialize() override; + char const *const *attributeNames() const override; + void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect) override; - const char *vertexShader() const override { - return - "attribute highp vec4 aVertex; \n" - "attribute highp vec2 aTexCoord; \n" - "uniform highp mat4 qt_Matrix; \n" - "varying highp vec2 vTexCoord; \n" - "void main() { \n" - " gl_Position = qt_Matrix * aVertex; \n" - " vTexCoord = aTexCoord; \n" - "}"; - } +private: + int m_matrix_id; + int m_opacity_id; +}; - const char *fragmentShader() const override { - return - "uniform lowp float qt_Opacity; \n" - "uniform lowp sampler2D uSource1; \n" - "uniform lowp sampler2D uSource2; \n" - "varying highp vec2 vTexCoord; \n" - "void main() { \n" - " lowp vec4 p1 = texture2D(uSource1, vTexCoord); \n" - " lowp vec4 p2 = texture2D(uSource2, vTexCoord); \n" - " gl_FragColor = (p1 * (1.0 - p2.a) + p2 * (1.0 - p1.a)) * qt_Opacity; \n" - "}"; - } +class XorBlendRhiShader : public QSGMaterialRhiShader // for when the scenegraph is using QRhi +{ +public: + XorBlendRhiShader(); + bool updateUniformData(RenderState &state, + QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; + void updateSampledImage(RenderState &state, int binding, QSGTexture **texture, + QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; +}; + +XorBlendMaterial::XorBlendMaterial() +{ + setFlag(SupportsRhiShader); + setFlag(Blending); +} + +QSGMaterialShader *XorBlendMaterial::createShader() const +{ + if (flags().testFlag(RhiShaderWanted)) + return new XorBlendRhiShader; + else + return new XorBlendShader; +} + +QSGMaterialType *XorBlendMaterial::type() const +{ + static QSGMaterialType type; + return &type; +} + +int XorBlendMaterial::compare(const QSGMaterial *o) const +{ + Q_ASSERT(o && type() == o->type()); + const XorBlendMaterial *other = static_cast<const XorBlendMaterial *>(o); + + if (!state.texture1 || !other->state.texture1) + return state.texture1 ? 1 : -1; + + if (!state.texture2 || !other->state.texture2) + return state.texture2 ? -1 : 1; + + if (int diff = state.texture1->comparisonKey() - other->state.texture1->comparisonKey()) + return diff; + + if (int diff = state.texture2->comparisonKey() - other->state.texture2->comparisonKey()) + return diff; - QList<QByteArray> attributes() const override { - return QList<QByteArray>() << "aVertex" << "aTexCoord"; + return 0; +} + +XorBlendShader::XorBlendShader() +{ + setShaderSourceFile(QOpenGLShader::Vertex, QLatin1String(":/scenegraph/twotextureproviders/shaders/xorblender.vert")); + setShaderSourceFile(QOpenGLShader::Fragment, QLatin1String(":/scenegraph/twotextureproviders/shaders/xorblender.frag")); +} + +void XorBlendShader::initialize() +{ + m_matrix_id = program()->uniformLocation("qt_Matrix"); + m_opacity_id = program()->uniformLocation("qt_Opacity"); + // The texture units never change, only the textures we bind to them so + // we set these once and for all here. + program()->setUniformValue("uSource1", 0); // GL_TEXTURE0 + program()->setUniformValue("uSource2", 1); // GL_TEXTURE1 +} + +char const *const *XorBlendShader::attributeNames() const +{ + static char const *const attr[] = { "aVertex", "aTexCoord", nullptr }; + return attr; +} + +void XorBlendShader::updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *) +{ + XorBlendMaterial *material = static_cast<XorBlendMaterial *>(newEffect); + + if (state.isMatrixDirty()) + program()->setUniformValue(m_matrix_id, state.combinedMatrix()); + + if (state.isOpacityDirty()) + program()->setUniformValue(m_opacity_id, state.opacity()); + + QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); + // We bind the textures in inverse order so that we leave the updateState + // function with GL_TEXTURE0 as the active texture unit. This is maintain + // the "contract" that updateState should not mess up the GL state beyond + // what is needed for this material. + f->glActiveTexture(GL_TEXTURE1); + material->state.texture2->bind(); + f->glActiveTexture(GL_TEXTURE0); + material->state.texture1->bind(); +} + +XorBlendRhiShader::XorBlendRhiShader() +{ + setShaderFileName(VertexStage, QLatin1String(":/scenegraph/twotextureproviders/shaders/+qsb/xorblender.vert")); + setShaderFileName(FragmentStage, QLatin1String(":/scenegraph/twotextureproviders/shaders/+qsb/xorblender.frag")); +} + +bool XorBlendRhiShader::updateUniformData(RenderState &state, QSGMaterial *, QSGMaterial *) +{ + bool changed = false; + QByteArray *buf = state.uniformData(); + Q_ASSERT(buf->size() >= 68); + + if (state.isMatrixDirty()) { + const QMatrix4x4 m = state.combinedMatrix(); + memcpy(buf->data(), m.constData(), 64); + changed = true; } - void updateState(const XorBlendState *state, const XorBlendState *) override { - QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); - // We bind the textures in inverse order so that we leave the updateState - // function with GL_TEXTURE0 as the active texture unit. This is maintain - // the "contract" that updateState should not mess up the GL state beyond - // what is needed for this material. - f->glActiveTexture(GL_TEXTURE1); - state->texture2->bind(); - f->glActiveTexture(GL_TEXTURE0); - state->texture1->bind(); + if (state.isOpacityDirty()) { + const float opacity = state.opacity(); + memcpy(buf->data() + 64, &opacity, 4); + changed = true; } - void resolveUniforms() override { - // The texture units never change, only the texturess we bind to them so - // we set these once and for all here. - program()->setUniformValue("uSource1", 0); // GL_TEXTURE0 - program()->setUniformValue("uSource2", 1); // GL_TEXTURE1 + return changed; +} + +void XorBlendRhiShader::updateSampledImage(RenderState &state, int binding, QSGTexture **texture, + QSGMaterial *newMaterial, QSGMaterial *) +{ + Q_UNUSED(state); + + XorBlendMaterial *mat = static_cast<XorBlendMaterial *>(newMaterial); + switch (binding) { // the binding for the sampler2Ds in the fragment shader + case 1: + *texture = mat->state.texture1; + break; + case 2: + *texture = mat->state.texture2; + break; + default: + return; } -}; +} /* The rendering is split into two nodes. The top-most node is not actually * rendering anything, but is responsible for managing the texture providers. @@ -148,10 +254,7 @@ public: setFlag(QSGNode::UsePreprocess, true); // Set up material so it is all set for later.. - m_material = XorBlendShader::createMaterial(); - m_material->state()->texture1 = nullptr; - m_material->state()->texture2 = nullptr; - m_material->setFlag(QSGMaterial::Blending); + m_material = new XorBlendMaterial; m_node.setMaterial(m_material); m_node.setFlag(QSGNode::OwnsMaterial); @@ -166,25 +269,24 @@ public: } void preprocess() override { - XorBlendState *state = m_material->state(); // Update the textures from the providers, calling into QSGDynamicTexture if required if (m_provider1) { - state->texture1 = m_provider1->texture(); - if (QSGDynamicTexture *dt1 = qobject_cast<QSGDynamicTexture *>(state->texture1)) + m_material->state.texture1 = m_provider1->texture(); + if (QSGDynamicTexture *dt1 = qobject_cast<QSGDynamicTexture *>(m_material->state.texture1)) dt1->updateTexture(); } if (m_provider2) { - state->texture2 = m_provider2->texture(); - if (QSGDynamicTexture *dt2 = qobject_cast<QSGDynamicTexture *>(state->texture2)) + m_material->state.texture2 = m_provider2->texture(); + if (QSGDynamicTexture *dt2 = qobject_cast<QSGDynamicTexture *>(m_material->state.texture2)) dt2->updateTexture(); } // Remove node from the scene graph if it is there and either texture is missing... - if (m_node.parent() && (!state->texture1 || !state->texture2)) + if (m_node.parent() && (!m_material->state.texture1 || !m_material->state.texture2)) removeChildNode(&m_node); // Add it if it is not already there and both textures are present.. - else if (!m_node.parent() && state->texture1 && state->texture2) + else if (!m_node.parent() && m_material->state.texture1 && m_material->state.texture2) appendChildNode(&m_node); } @@ -206,7 +308,7 @@ public slots: private: QRectF m_rect; - QSGSimpleMaterial<XorBlendState> *m_material; + XorBlendMaterial *m_material; QSGGeometryNode m_node; QPointer<QSGTextureProvider> m_provider1; QPointer<QSGTextureProvider> m_provider2; diff --git a/examples/quick/scenegraph/twotextureproviders/xorblender.h b/examples/quick/scenegraph/twotextureproviders/xorblender.h index 94132f09fb..17557b8efd 100644 --- a/examples/quick/scenegraph/twotextureproviders/xorblender.h +++ b/examples/quick/scenegraph/twotextureproviders/xorblender.h @@ -58,6 +58,7 @@ class XorBlender : public QQuickItem Q_OBJECT Q_PROPERTY(QQuickItem *source1 READ source1 WRITE setSource1 NOTIFY source1Changed) Q_PROPERTY(QQuickItem *source2 READ source2 WRITE setSource2 NOTIFY source2Changed) + QML_ELEMENT public: explicit XorBlender(QQuickItem *parent = 0); diff --git a/examples/quick/shared/SimpleLauncherDelegate.qml b/examples/quick/shared/SimpleLauncherDelegate.qml index 75aecf262c..7f07dea52a 100644 --- a/examples/quick/shared/SimpleLauncherDelegate.qml +++ b/examples/quick/shared/SimpleLauncherDelegate.qml @@ -61,12 +61,12 @@ Rectangle { GradientStop { position: 0 Behavior on color {ColorAnimation { duration: 100 }} - color: button.pressed ? "#e0e0e0" : "#fff" + color: tapHandler.pressed ? "#e0e0e0" : "#fff" } GradientStop { position: 1 Behavior on color {ColorAnimation { duration: 100 }} - color: button.pressed ? "#e0e0e0" : button.containsMouse ? "#f5f5f5" : "#eee" + color: tapHandler.pressed ? "#e0e0e0" : button.containsMouse ? "#f5f5f5" : "#eee" } } diff --git a/examples/quick/tableview/gameoflife/gameoflifemodel.h b/examples/quick/tableview/gameoflife/gameoflifemodel.h index 3ea1469861..161e0b2cfc 100644 --- a/examples/quick/tableview/gameoflife/gameoflifemodel.h +++ b/examples/quick/tableview/gameoflife/gameoflifemodel.h @@ -54,11 +54,13 @@ #include <array> #include <QAbstractTableModel> #include <QPoint> +#include <QtQml/qqml.h> //! [modelclass] class GameOfLifeModel : public QAbstractTableModel { Q_OBJECT + QML_ELEMENT Q_ENUMS(Roles) public: diff --git a/examples/quick/tableview/gameoflife/main.cpp b/examples/quick/tableview/gameoflife/main.cpp index 5101880b06..fcea7080ea 100644 --- a/examples/quick/tableview/gameoflife/main.cpp +++ b/examples/quick/tableview/gameoflife/main.cpp @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) QQmlApplicationEngine engine; //! [registertype] - qmlRegisterType<GameOfLifeModel>("GameOfLifeModel", 1, 0, "GameOfLifeModel"); + qmlRegisterTypesAndRevisions<GameOfLifeModel>("GameOfLifeModel", 1); //! [registertype] engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); diff --git a/examples/quick/tableview/pixelator/imagemodel.h b/examples/quick/tableview/pixelator/imagemodel.h index bf0ec90da4..de8ad7cd8d 100644 --- a/examples/quick/tableview/pixelator/imagemodel.h +++ b/examples/quick/tableview/pixelator/imagemodel.h @@ -53,12 +53,14 @@ #include <QAbstractTableModel> #include <QImage> +#include <QtQml/qqml.h> //! [model] class ImageModel : public QAbstractTableModel { Q_OBJECT Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged) + QML_ELEMENT public: ImageModel(QObject *parent = nullptr); diff --git a/examples/quick/tableview/pixelator/main.cpp b/examples/quick/tableview/pixelator/main.cpp index c57039556a..a8cb6c4e86 100644 --- a/examples/quick/tableview/pixelator/main.cpp +++ b/examples/quick/tableview/pixelator/main.cpp @@ -60,7 +60,7 @@ int main(int argc, char *argv[]) QQmlApplicationEngine engine; //! [registertype] - qmlRegisterType<ImageModel>("ImageModel", 1, 0, "ImageModel"); + qmlRegisterTypesAndRevisions<ImageModel>("ImageModel", 1); //! [registertype] engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); diff --git a/examples/quick/text/styledtext-layout.qml b/examples/quick/text/styledtext-layout.qml index fe7b40b89b..631a37b493 100644 --- a/examples/quick/text/styledtext-layout.qml +++ b/examples/quick/text/styledtext-layout.qml @@ -78,8 +78,27 @@ Rectangle { line.y -= height - margin line.x = width / 2 + margin } + + if (line.isLast) { + lastLineMarker.x = line.x + line.implicitWidth + lastLineMarker.y = line.y + (line.height - lastLineMarker.height) / 2 + } } //! [layout] + + Rectangle { + id: lastLineMarker + color: "#44cccccc" + width: theEndText.width + margin + height: theEndText.height + margin + + Text { + id: theEndText + text: "THE\nEND" + anchors.centerIn: parent + font.pixelSize: myText.font.pixelSize / 2 + } + } } } |