我正在制作一个应用程序,我想在 C++ 源代码中从 QML 调用一个函数,并且该 C++ 函数返回我和对象,我可以在 QML 的 javascript 部分中使用相同的属性使用它。我已经建立了联系和一切。我尝试发送 QVariantMap 并尝试在 javascript 中使用该对象,但我没有获得该对象的属性
问问题
3492 次
3 回答
3
将基于 QObject 的类型从 C++ 导出到 QML 有两种方法:
- 直接从属性 READer 或 Q_INVOKABLE 函数返回独立的 QObject。注意,作为属性返回的对象拥有 C++ 所有权,Q_INVOKABLE-object 拥有 JS 所有权。您可以通过http://doc.qt.nokia.com/4.7/qdeclarativeengine.html#setObjectOwnership更改此默认行为。
- 返回 QObjects 数组。在这种情况下,您应该使用 QObjectList、QDeclarativePropertyMap(不是 QVariantMap)或 QAbstractListModel。
于 2011-12-19T14:35:24.783 回答
1
您要公开的类必须继承自 QObject(或 QDeclarativeItem,如果它们是 UI 组件),并且您必须在加载 QML 代码之前在 main() 或 Qt 插件中注册它们的类型。
看看http://developer.qt.nokia.com/doc/qt-4.7/declarative-tutorials-extending-chapter1-basics.html
于 2011-12-15T23:42:09.220 回答
0
要将对象作为函数返回值从 C++ 传递到 QML,返回值类型必须是QVariant
,而不是QVariantMap
,即使这是 C++ 代码中的类型。所以只需将您的initialize
函数签名更改为
QVariant initialize();
无需更改任何其他内容,然后您就可以访问属性。
关于您稍后对要调用该返回对象的方法的评论,这是不可能的;返回的对象只是一组名称-值对。如果您希望对象具有,例如,一个id
属性,您需要在返回它之前使用 C++ 中insert
的该键获取一个值。QVariantMap
于 2011-12-14T14:49:21.827 回答