Qt - 如果加载器源动态变化,如何连接来自加载器项的信号

时间:2016-05-15 07:10:58

标签: qt qml

我有一个应用程序需要在多个可用屏幕之间切换屏幕。我正在检查qml中是否可以使用loader。

我面临的问题是连接来自已加载项目的信号。

我在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()
   }
}

有人知道如何使用加载器,或者不应该使用加载器吗?

1 个答案:

答案 0 :(得分:0)

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

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

这是因为MyItemOne未定义changeToFirst信号。 ignoreUnknownSignals元素的Connections属性可用于抑制警告,或者两个屏幕都应定义相同的信号集。

如果在切换时始终完全卸载前一个视图并不重要,则可以使用

Loader