Получить объект C ++ в QML и использовать его в JavaScript - PullRequest
2 голосов
/ 21 июля 2011

Я делаю приложение, в котором я хотел бы вызвать функцию из QML в исходном коде C ++ и эту функцию c ++, чтобы вернуть меня и объект, который я могу использовать с теми же свойствами в части JavaScript QML. Я сделал связь и все. Я пытался отправить QVariantMap и пытался использовать этот объект в JavaScript, но я не получаю свойства этого объекта

Ответы [ 3 ]

3 голосов
/ 19 декабря 2011

Существует два способа экспорта типов на основе QObject из C ++ в QML:

  1. Возврат автономного QObject непосредственно из свойства READer или функции Q_INVOKABLE.Обратите внимание, что объект, возвращаемый в качестве свойства, принадлежит C ++, Q_INVOKABLE-объект принадлежит JS.Вы можете изменить это поведение по умолчанию с помощью http://doc.qt.nokia.com/4.7/qdeclarativeengine.html#setObjectOwnership.
  2. Возвращаемого массива объектов QObject.В этом случае вы должны использовать QObjectList, QDeclarativePropertyMap (не QVariantMap) или QAbstractListModel.
1 голос
/ 16 декабря 2011

Ваши классы должны быть унаследованы от QObject (или QDeclarativeItem, если они являются компонентами пользовательского интерфейса), и вам придется зарегистрировать их типы в вашем main () или в плагине Qt перед загрузкой кода QML.

Посмотрите на http://developer.qt.nokia.com/doc/qt-4.7/declarative-tutorials-extending-chapter1-basics.html

0 голосов
/ 14 декабря 2011

Чтобы передать объект из C ++ в QML в качестве возвращаемого значения функции, тип возвращаемого значения должен быть QVariant, а не QVariantMap, даже если это тип в коде C ++. Так что просто измените вашу initialize сигнатуру функции на

QVariant initialize();

без изменения чего-либо еще, и тогда вы можете получить доступ к свойствам.

Что касается вашего последующего комментария о желании вызвать методы для этого возвращенного объекта, это невозможно; возвращаемый объект - это просто набор пар имя-значение. Если вы хотите, чтобы объект имел, скажем, свойство id, вам необходимо insert значение с этим ключом, равное QVariantMap в C ++, прежде чем возвращать его.

...