BB Cascades,将数据从 C 传递到 Page1.qml 和 Page2.qml
Posted
技术标签:
【中文标题】BB Cascades,将数据从 C 传递到 Page1.qml 和 Page2.qml【英文标题】:BB Cascades, Passing data from C to Page1.qml and also to Page2.qml 【发布时间】:2013-02-10 00:31:55 【问题描述】:我知道这可能是我在这里遗漏的一件非常小的事情,但我花了很多时间试图解决这个问题。我来自 Objective-C 背景,我想做的是:
我有一个 main.qml,它是一个 navigationPane,它还添加了 2 个其他外部页面作为附加对象。这两个页面具有网格列表视图。现在,有一个 MyApp.cpp 文件,它加载一个 Json 文件并将结果填充到 main.qml 文件中。我一开始只在这个页面上显示相关的项目。当用户点击任何项目时,我想将它们带到 page2.qml,它具有我上面提到的网格列表视图,并使用从 main.qml 传递的 dataModel 填充它(其中包含来自 MyApp.cpp 的所有数据)。这让我一点快乐都没有!我需要帮助。我能做些什么来完成这项工作?请问我在这方面需要帮助...
【问题讨论】:
我有点犹豫用 C++、QML 和 JSON 来标记它。这些是对的吗?或者你可以添加标签。 也许您可以使用属性别名来公开属性或对象,如下所述:bbcascadescode.tumblr.com/post/40740528163/… 既然您是从 C++ 代码中的 DataModel 获取数据(我想是从 Q_INVOKABLE 函数),为什么不再次调用相同的函数呢?它会使代码更简单。 【参考方案1】:我不确定这是否是最佳实践,但我发现最简单的方法是使用 Qt 全局对象。
基本上将您的数据或对象分配给 Qt 对象,然后您可以从任何其他页面访问它。
例如 在 onCreationCompleted 的 main.qml 或您接收数据的任何函数中:
function getData(data)
Qt.myVariable = data;
然后在您的其他页面中,您可以访问它。例如。在 Page2.qml 中:
Page
onCreationComplete:
myLabel.text = Qt.myVariable;
正如我所提到的,这也适用于对象,因此您可以分配导航窗格、工作表、页面等。因此像“Qt.myNavPane.push(page)”这样的事情变得可能。
我遇到了需要将 Qt 用于各种目的的问题。我认为信号和插槽是更好的做法,但并不总是实用的。
【讨论】:
嗨聪明的家伙...非常感谢您的回复。我希望传递到下一页的数据是要在 page2.qml 中的网格列表视图中使用的数据模型。我使用属性别名将位于 page1.qml 的文本传递到 page2.qml,但是当我传递模型时,它不会填充列表。 page2.qml 还有一个名为 detailData 的属性,它是一个变体别名。希望我说得通吗? @彼得 您可以尝试使用函数而不是属性别名。所以在 page2 你可以有“function passData(dataModel)”,然后在 Page1 你可以调用类似“page1.passData(myDataModel)”的函数。如果我理解正确,那可能就是您要找的东西。以上是关于BB Cascades,将数据从 C 传递到 Page1.qml 和 Page2.qml的主要内容,如果未能解决你的问题,请参考以下文章
BlackBerry Cascades:如何将数据加载到 ListView