- Qt 5.15
- Qt QML
- Qt QML Examples
- Extending QML - Adding Types Example
- Qt 5.15.18 Reference Documentation

# Extending QML - Adding Types Example

Exporting C++ Classes.

The Adding Types Example shows how to add a new object type, `Person`, to QML. The `Person` type can be used from QML like this:

     import People 1.0

     Person {
         name: "Bob Jones"
         shoeSize: 12
     }

#### Declare the Person Class

All QML types map to C++ types. Here we declare a basic C++ Person class with the two properties we want accessible on the QML type - name and shoeSize. Although in this example we use the same name for the C++ class as the QML type, the C++ class can be named differently, or appear in a namespace.

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

         QString name() const;
         void setName(const QString &);

         int shoeSize() const;
         void setShoeSize(int);

     private:
         QString m_name;
         int m_shoeSize;
     };

#### Define the Person Class

     Person::Person(QObject *parent)
     : QObject(parent), m_shoeSize(0)
     {
     }

     QString Person::name() const
     {
         return m_name;
     }

     void Person::setName(const QString &n)
     {
         m_name = n;
     }

     int Person::shoeSize() const
     {
         return m_shoeSize;
     }

     void Person::setShoeSize(int s)
     {
         m_shoeSize = s;
     }

The Person class implementation is quite basic. The property accessors simply return members of the object instance.

#### Running the Example

The main.cpp file in the example includes a simple shell application that loads and runs the QML snippet shown at the beginning of this page.

Example project @ code.qt.io