我目前正在学习Qt进行一些跨平台开发,我正在尝试使用QML做所有事情。我知道有很多方法可以使用C ++来解决我的问题,但我希望保持对模型的忠诚并使用QML。
这是:如果我使用加载器显示qml文件,如下面的代码所示,我如何与secondPage.qml中的main.qml进行通信?
我认为这是通过信号,但在进一步阅读时,似乎信号上的所有动作都在发送它的类中(使用连接方法)。以下是我的资源:http://qt-project.org/doc/qt-4.8/qmlevents.html#connecting-signals-to-methods-and-signals
或者,这可能是QML应用程序的错误设计。在事情变得无法控制之前,我试图摆脱使用单个源文件......
main.qml:
Rectangle {
id: background
...
Item{
id: item1
Loader {
....
id:pageLoader;
source : "secondPage.qml"
focus:true;
}
}
答案 0 :(得分:2)
在secondPage.qml
中,您可以直接访问您的背景元素,因为子级可以访问层次结构中的任何父级。
另一种可能性是在secondPage
组件中声明一个信号,然后将此组件中的信号连接到您的Loader的onLoaded
处理程序中的曾祖父母中的信号。如果您希望在应用程序中多次重复使用组件而不考虑父级是什么,它会使它更容易和更清洁。
答案 1 :(得分:2)
你可以在SecondPage.qml中声明一些信号并将它们连接到Main.qml的函数。
如下所示,假设你在secondPage.qml中定义了secondPageSignal()并且你想在secondPage的信号上调用Main.qml中的doSomething()函数,你可以在Loader的onLoaded处理程序中连接它。
Rectangle {
id: background
...
function doSomething() {
}
Item{
id: item1
Loader {
....
id: pageLoader;
source : "secondPage.qml"
focus:true;
onLoaded:{
pageLoader.item.secondPageSignal.connect(background.doSomething);
}
}
}
}