我有一个应用程序需要在多个可用屏幕之间切换屏幕。我正在检查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()
}
}
有人知道如何使用加载器,或者不应该使用加载器吗?
答案 0 :(得分:0)
如果我使用MyItemOne.qml
作为myLoader.source
(Qt5.6.0)的初始值,则代码可以正常工作。但是,它会打印出警告:
QML Connections: Cannot assign to non-existent property "onChangeToFirst"
这是因为MyItemOne
未定义changeToFirst
信号。 ignoreUnknownSignals
元素的Connections
属性可用于抑制警告,或者两个屏幕都应定义相同的信号集。
Loader
。