我逐渐熟悉QT5中的QML。因此,我试图通过以下视频制作代码:video
在此视频中,使用了代码send.connect(target.receive());
。但是这部分不起作用。我收到错误消息:
qrc:/Receiver.qml:8:错误:无法将[undefined]分配给QString
此方法被弃用还是我做错了什么?
main.qml
Window {
visible: true
width: 640
height: 480
title: qsTr("Jurassic World")
Background {
id: background
anchors.fill: parent
target: sender
Sender {
id: sender
y: 145
displayText: "Sender"
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 50
target: receiver
}
Receiver {
id: receiver
x: 376
y: 158
displayText: "Receiver"
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: 50
width: sender.width
}
}
}
Receiver.qml
Cirkel {
id: receiveButton
function receive(value)
{
displayText = value
clicknotify.running = true
}
SequentialAnimation on buttonColor
{
id: clicknotify
running: false
ColorAnimation {
from: "#afc4cb"
to: "red"
duration: 200
}
ColorAnimation {
from: "red"
to: "#afc4cb"
duration: 200
}
}
}
Sender.qml
Cirkel {
id: sendButton
property int counter: 0
property Receiver target: null
signal send(string value)
onTargetChanged: {
send.connect(target.receive());
}
MouseArea {
anchors.fill: parent
onClicked: {
counter++
parent.send(counter)
displayText = counter
}
onPressed: parent.buttonColor = "green"
onReleased: parent.buttonColor = "#afc4cb"
}
}
问题: 如何将信号从一个qml链接到另一个qml功能?
答案 0 :(得分:0)
我想说的是,在Sender.qml中这样做:
signal send(int value)
...
sendButton.send(counter)
在main.qml中只是做
Sender {
id: sender
...
onSend: receiver.receive(value)
}
仅此而已。不需要整个目标分配。 顺便说一下,您在接收函数中遇到了数据类型问题(整数到字符串) 解决此问题:
function receive(value)
{
displayText = "" + value
clicknotify.running = true
}
通常,通过添加“ on”和大写首字母,可以将QML中的信号作为函数处理。
例如,一个Button公开了clicked
信号,当您处理它时,您使用了onClicked
答案 1 :(得分:0)
您写:
send.connect(target.receive());
您在其中调用target.receive()
并尝试将其返回值连接到send
的地方。
您想要的是:
send.connect(target.receive);
将send
连接到功能receive
本身。
推荐
也可以尝试使用
Connection
对象的声明方式。