Basic support for qmlRegisterType

This commit is contained in:
Filippo Cucchetto 2016-01-25 23:21:15 +01:00
parent cd0c08fb50
commit 8d62c449be
4 changed files with 15 additions and 1 deletions

View File

@ -169,6 +169,7 @@ DOS_API void dos_qurl_to_string(void* vptr, char** result);
// QDeclarative
DOS_API void dos_qdeclarative_qmlregistertype(const char* uri, int major, int minor,
const char* qmlName, int* result,
void* staticMetaObject,
CreateDObject createDObject,
DeleteDObject deleteDObject);

View File

@ -11,6 +11,8 @@ namespace DOS {
class DosQObjectWrapper : public QObject
{
public:
static const QMetaObject staticMetaObject;
DosQObjectWrapper(QObject *parent = nullptr);
~DosQObjectWrapper();
@ -21,6 +23,7 @@ namespace DOS {
static DeleteDObject deleteDObject();
static void setCreateDObject(CreateDObject createDObject);
static void setDeleteDObject(DeleteDObject deleteDObject);
static void setStaticMetaObject(const QMetaObject& metaObject);
private:
void* m_dObject;

View File

@ -650,15 +650,19 @@ void dos_qabstractlistmodel_dataChanged(void *vptr,
void dos_qdeclarative_qmlregistertype(const char *uri, int major, int minor,
const char *qml, int *result,
void *staticMetaObject,
CreateDObject createDObject,
DeleteDObject deleteDObject)
{
static int i = 0;
auto holder = static_cast<DosIQMetaObjectHolder*>(staticMetaObject);
if (i == 0) {
*result = qmlRegisterType<DosQObjectWrapper>(uri, major, minor, qml);
DosQObjectWrapper::setCreateDObject(createDObject);
DosQObjectWrapper::setDeleteDObject(deleteDObject);
DosQObjectWrapper::setStaticMetaObject(*(holder->data()->metaObject()));
*result = qmlRegisterType<DosQObjectWrapper>(uri, major, minor, qml);
}
++i;

View File

@ -5,6 +5,7 @@
namespace DOS {
const QMetaObject DosQObjectWrapper::staticMetaObject = QObject::staticMetaObject;
CreateDObject DosQObjectWrapper::m_createDObject;
DeleteDObject DosQObjectWrapper::m_deleteDObject;
@ -47,4 +48,9 @@ void DosQObjectWrapper::setCreateDObject(CreateDObject createDObject) { m_create
void DosQObjectWrapper::setDeleteDObject(DeleteDObject deleteDObject) { m_deleteDObject = deleteDObject; }
void DosQObjectWrapper::setStaticMetaObject(const QMetaObject &metaObject)
{
*(const_cast<QMetaObject*>(&staticMetaObject)) = metaObject;
}
}