Qt QML:通过信号与曾祖父母沟通
我目前正在学习Qt进行一些跨平台开发,我正在尝试使用QML做所有事情。我知道有很多方法可以解决C++中的问题,但是我想保持对模型的正确性,使用QML。p> 这里是:如果我使用加载程序来显示qml文件,如以下代码所示,那么如何从secondPage.qml与main.qml通信 我假设这是通过信号实现的,但进一步阅读后,似乎信号上的所有操作都在发送它的类中(使用connected方法)。以下是我在这方面的资源: 或者,这可能是QML应用程序的错误设计。在事情变得太失控之前,我正试图摆脱使用单一源文件的习惯 main.qml:Qt QML:通过信号与曾祖父母沟通,qt,qml,qtquick2,Qt,Qml,Qtquick2,我目前正在学习Qt进行一些跨平台开发,我正在尝试使用QML做所有事情。我知道有很多方法可以解决C++中的问题,但是我想保持对模型的正确性,使用QML。p> 这里是:如果我使用加载程序来显示qml文件,如以下代码所示,那么如何从secondPage.qml与main.qml通信 我假设这是通过信号实现的,但进一步阅读后,似乎信号上的所有操作都在发送它的类中(使用connected方法)。以下是我在这方面的资源: 或者,这可能是QML应用程序的错误设计。在事情变得太失控之前,我正试图摆脱使用单一源文
Rectangle {
id: background
...
Item{
id: item1
Loader {
....
id:pageLoader;
source : "secondPage.qml"
focus:true;
}
}
在
secondPage.qml
中,您可以直接访问背景元素,因为子元素可以访问层次结构中的任何父元素
另一种可能是在您的
secondPage
组件中声明一个信号,然后在加载程序的onload
处理程序中将此组件中的信号连接到您的曾祖父母中的信号。如果您希望您的组件在应用程序中可多次重复使用,而无需关联父级是什么,那么它将变得更简单、更干净。您可以在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);
}
}
}
}
叹息。。。为了澄清问题,我重新措辞了文本,但没有修改标题。很抱歉在
secondPage.qml
中未使用“曾祖父母”@berules>,您可以直接访问背景元素。另一种可能是在第二页
组件中声明一个信号,然后将此组件的信号连接到加载程序
的onload
处理程序中的曾祖父母的信号!你说得对!我曾以某种方式说服自己,secondPage.qml在出现其他一些错误后无法访问其父级,但事实并非如此。非常感谢,如果你将此作为答案提交,我将确保接受。对不起,我后来意识到我们谈论的是同一件事,并发布了相同的答案。