▷ instantiable type
QObject를 상속받은 모든 QML의 object는 C++에서 등록가능하다.
단, qmlRegisterType()으로 qml을 등록해야한다.

[code language=”cpp”] qmlRegisterType<Message>("com.mycompany.messaging", 1, 0, "Message");[/code]
[code language=”cpp”] import com.mycompany.messaging 1.0

Message {
author: "Amelie"
creationDate: new Date()
}[/code]

[code language=”cpp”] class Message : public QObject
{
Q_OBJECT
Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged)
Q_PROPERTY(QDateTime creationDate READ creationDate WRITE setCreationDate NOTIFY creationDateChanged)
public:
// …
};[/code]

▷ non-instantiable type을 위하여 Qt에서 제공
QML Type의 system으로 등록 하되, instantiable type은 아닌 경우,
예를 들어 c++ class의 경우이다.
1. Interface type 인스턴스화 할 수 없는 경우
2. 기본 class type 이나 Qml이 없는 경우
3. QML의 일부 접근이 필요하나 인스턴스화 할 필요 없는 경우
4. 싱글 인스턴스를 통해 qml 제공

그럼 Method를 알아보자
1. qmlRegisterType()

[code language=”cpp”] template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);

template<typename T, int metaObjectRevision>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);[/code]

[code language=”cpp”] #include <QtQml>

qmlRegisterType<MySliderItem>("com.mycompany.qmlcomponents", 1, 0, "Slider");[/code]

c++클래스에 “com.mycompany.qmlcomponents”라는 유형의 네임 스페이스의 버전 1.0 슬라이더라는 QML 유형을 MySliderItem으로 등록한다는 의미이다

[code language=”cpp”] import com.mycompany.qmlcomponents 1.0

Slider {
// …
}[/code]

2. qmlRegisterInterface(const char * typeName) -> qml을 typeName으로 interface 등록.
3. qmlRegisterUncreatableType()
4. qmlRegisterSingletonType()

 출처 : http://qt-project.org/doc/qt-5/qtqml-cppintegration-definetypes.html

|   Handler Event in Qml 》