Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QML:通过信号与曾祖父母沟通_Qt_Qml_Qtquick2 - Fatal编程技术网

Qt QML:通过信号与曾祖父母沟通

Qt QML:通过信号与曾祖父母沟通,qt,qml,qtquick2,Qt,Qml,Qtquick2,我目前正在学习Qt进行一些跨平台开发,我正在尝试使用QML做所有事情。我知道有很多方法可以解决C++中的问题,但是我想保持对模型的正确性,使用QML。p> 这里是:如果我使用加载程序来显示qml文件,如以下代码所示,那么如何从secondPage.qml与main.qml通信 我假设这是通过信号实现的,但进一步阅读后,似乎信号上的所有操作都在发送它的类中(使用connected方法)。以下是我在这方面的资源: 或者,这可能是QML应用程序的错误设计。在事情变得太失控之前,我正试图摆脱使用单一源文

我目前正在学习Qt进行一些跨平台开发,我正在尝试使用QML做所有事情。我知道有很多方法可以解决C++中的问题,但是我想保持对模型的正确性,使用QML。p> 这里是:如果我使用加载程序来显示qml文件,如以下代码所示,那么如何从secondPage.qml与main.qml通信

我假设这是通过信号实现的,但进一步阅读后,似乎信号上的所有操作都在发送它的类中(使用connected方法)。以下是我在这方面的资源:

或者,这可能是QML应用程序的错误设计。在事情变得太失控之前,我正试图摆脱使用单一源文件的习惯

main.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在出现其他一些错误后无法访问其父级,但事实并非如此。非常感谢,如果你将此作为答案提交,我将确保接受。对不起,我后来意识到我们谈论的是同一件事,并发布了相同的答案。