我有一个应用程序需要在多个可用屏幕之间切换屏幕。我正在检查 qml 中的加载器是否可以实现这一点。
我面临的问题是连接已加载项目的信号。
我在 qt 文档中使用了一个应用程序示例,发现应用程序 qml 中的 CreateConnection 不能有 if 条件。
我还尝试使其在函数中发出信号槽连接并在加载程序的源更改时调用,但这也不起作用。
应用程序.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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyItemOne.qml
import QtQuick 2.0
Rectangle {
id: myItem
signal changeToSecond()
width: 100; height: 100
MouseArea {
anchors.fill: parent
onClicked: myItem.changeToSecond()
}
}
Run Code Online (Sandbox Code Playgroud)
MyItemTwo.qml
import QtQuick 2.0
Rectangle {
id: myItem
signal changeToFirst()
width: 100; height: 100
MouseArea {
anchors.fill: parent
onClicked: myItem.changeToFirst()
}
}
Run Code Online (Sandbox Code Playgroud)
有人知道如何使用 loader 来实现此目的,或者 loader 不应该用于此目的?
MyItemOne.qml如果我使用(Qt5.6.0)的初始值,你的代码工作正常myLoader.source。但是,它会打印出警告:
QML Connections: Cannot assign to non-existent property "onChangeToFirst"
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为 MyItemOne没有定义changeToFirst信号。ignoreUnknownSignals元素的属性可Connections用于抑制警告,或者两个屏幕应定义同一组信号。
Loader如果切换时前一个视图始终完全卸载并不重要,则可以使用。
| 归档时间: |
|
| 查看次数: |
2437 次 |
| 最近记录: |