我在同一目录中有两个 qml 文件,main.qml 和 MyItem.qml。当鼠标区域被单击时,消息“clicked!” 由 onMessage main.qml 成功处理。然而,main.qml 永远不会检索/处理消息“信号已发送”。为什么?
主要.qml:
import QtQuick 2.0
Item {
width: 100; height: 100
Loader {
id: myLoader
source: "MyItem.qml"
Connections {
target: myLoader.item
onMessage: console.log(msg)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的项目.qml:
import QtQuick 2.0
Rectangle {
id: myItem
signal message(string msg)
width: 100; height: 100
Component.onCompleted: {
myItem.message("signal sent");
}
MouseArea {
anchors.fill: parent
onClicked: myItem.message("clicked!")
}
}
Run Code Online (Sandbox Code Playgroud)
因为MyItem是之前构造的myLoader,所以Connections对象还没有连接。您可以通过向Component.onCompleted每个对象的处理程序添加一些打印语句来看到这一点:
import QtQuick 2.0
Item {
width: 100; height: 100
Loader {
id: myLoader
source: "MyItem.qml"
Connections {
target: myLoader.item
onMessage: console.log(msg)
Component.onCompleted: print("Connections Component.onCompleted")
}
}
}
Run Code Online (Sandbox Code Playgroud)
import QtQuick 2.0
Rectangle {
id: myItem
signal message(string msg)
width: 100; height: 100
Component.onCompleted: {
print("MyItem Component.onCompleted")
myItem.message("signal sent");
}
MouseArea {
anchors.fill: parent
onClicked: myItem.message("clicked!")
}
}
Run Code Online (Sandbox Code Playgroud)
qml: MyItem Component.onCompleted
qml: Connections Component.onCompleted
Run Code Online (Sandbox Code Playgroud)