Qt - 如何在加载器项目源动态更改时连接信号

5

我有一个应用程序,需要在多个可用屏幕之间切换。我正在检查是否可以使用qml中的加载器实现。

我遇到的问题是连接来自加载项的信号。

我在qt文档中使用了一个应用程序示例,并发现qml中的CreateConnection不能有if条件。

我还尝试在函数中进行信号插槽连接,并在加载器的源更改时调用它,但也没有起作用。

Application.qml

import QtQuick 2.0

Item {
    width: 100; height: 100

    Loader {
       id: myLoader
       source: "MyItem.qml"
    }

    Connections {
        target: myLoader.item
        // here i tried using if (myLoader.item == "qrc:MyItemOne.qml") , but can't use if
        onChangeToSecond: {
               myLoader.source = "MyItemTwo.qml"
        }

        onChangeToFirst: {
               myLoader.source = "MyItemOne.qml"
        }
    }
}

MyItemOne.qml

import QtQuick 2.0

Rectangle {
   id: myItem
   signal changeToSecond()

   width: 100; height: 100

   MouseArea {
       anchors.fill: parent
       onClicked: myItem.changeToSecond()
   }
}

MyItemTwo.qml

import QtQuick 2.0

Rectangle {
   id: myItem
   signal changeToFirst()

   width: 100; height: 100

   MouseArea {
       anchors.fill: parent
       onClicked: myItem.changeToFirst()
   }
}

有人知道如何使用loader来处理这个问题吗?或者说,不应该使用loader来处理这个问题吗?


2
在一般情况下,不应该使用Loader。如果您有多个屏幕,请使用StackView - BaCaRoZzo
1个回答

2

如果我使用MyItemOne.qml作为myLoader.source的初始值(Qt5.6.0),你的代码可以正常工作。但是,它会打印出一个警告:

QML Connections: Cannot assign to non-existent property "onChangeToFirst"

这种情况发生是因为MyItemOne没有定义changeToFirst信号。可以使用Connections元素的ignoreUnknownSignals属性来抑制警告,或者两个屏幕应该定义相同的信号集。
如果在切换时不介意前一个视图总是完全卸载,可以使用Loader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接