Extending QML with a C++ class in a namespace

From Qt Wiki
Revision as of 17:13, 12 March 2015 by AutoSpider (talk | contribs) (Decode HTML entity names)
Jump to navigation Jump to search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

Extending QML with a C++ class in a custom namespace

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;
 };
}

#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

}
}