2

我目前正在学习 Qt 以进行一些跨平台开发,并且我正在尝试使用 QML 做所有事情。我知道有很多方法可以使用 C++ 解决我的问题,但我想忠于模型并使用 QML。

这里是:如果我使用加载器来显示 qml 文件,如下面的代码所示,我如何从 secondPage.qml 与 main.qml 通信?

我认为这将是通过信号,但在进一步阅读后,似乎对信号的所有操作都在发送它的类中(使用 connected 方法)。这是我的资源: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;
         }
}
4

2 回答 2

3

您可以在 SecondPage.qml 中声明一些信号并将它们连接到 Main.qml 的函数。

如下所示,假设您在 secondPage.qml 中定义了 secondPageSignal(),并且您想在 Main.qml 中对 secondPage 的信号调用 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);
            }
         }
    }
}
于 2013-08-24T01:22:37.607 回答
2

secondPage.qml您可以直接访问背景元素,因为子元素可以访问层次结构中的任何父元素。

另一种可能性是在你的组件中声明一个信号,然后在你的加载器secondPage的处理程序中将来自这个组件的信号连接到你曾祖父母的信号。onLoaded如果您希望您的组件可以在您的应用程序中多次重复使用,而无需确定什么是父组件,它会变得更容易和更清洁。

于 2013-08-23T21:52:20.870 回答