Extending QML with a C++ class in a namespace

From Qt Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

The example code below shows how you can extend QML with a C++ class in a custom namespace.

main.cpp

#include <QtGui>
#include <QtDeclarative>

namespace MyNamespace {

class Person : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName)
    Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
    Person() {}
    QString name() const { return m_name; }
    void setName(const QString& n) { m_name = n; }
    int shoeSize() const { return m_size; }
    void setShoeSize(int s) { m_size = s; }
private:
    QString m_name;
    int m_size;
};

} // MyNamespace

#include "main.moc"

using namespace MyNamespace;

int main(int argc, char** argv) {
    QApplication app(argc, argv);
    qmlRegisterType<Person>("People", 1, 0, "Person");
    MyNamespace::Person myObj;
    QDeclarativeView view;
    view.rootContext()->setContextProperty("rootItem", (Person *)&myObj);
    view.setSource(QUrl::fromLocalFile("main.qml"));
    view.resize(200,100);
    view.show();
    return app.exec();
}

main.qml

import QtQuick 1.0
import People 1.0

Text {
    text: myPerson.name

    Person {
        id: myPerson
        name: "Sigurd"
        shoeSize: 24
    }
}