
//MySigRect.qml
import QtQuick 2.0
Item {
id: root
//槽名称必须为on+信号名(第一个字母大写),否则编译不通过
//信号在哪个组件定义槽就在哪个组件实现(槽通常不在本组件文件里实现,而是被外部使用时实现)
signal mySignal //信号定义
Rectangle{
id: rect
width: 100
height: 100
color: "red"
MouseArea{
anchors.fill: parent
onClicked: root.mySignal() //点击时发送mySignal信号
onPressed: rect.color = "darkred"
onReleased: rect.color = "red"
}
}
}
//main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Text {
id: txt
text: qsTr("text")
}
MySigRect{
y: 100
//槽名称必须为on+信号名(第一个字母大写),否则编译不通过
//信号在哪个组件定义槽就在哪个组件实现(槽通常不在本组件文件里实现,而是被外部使用时实现)
onMySignal: {
txt.text = "hello new text"
}
}
}
利用Connections的方法:

//MySigRect
import QtQuick 2.0
Item {
id: root
//槽名称必须为on+信号名(第一个字母大写),否则编译不通过
//信号在哪个组件定义槽就在哪个组件实现(槽通常不在本组件文件里实现,而是被外部使用时实现)
signal mySignal //信号定义
Rectangle{
id: rect
width: 100
height: 100
color: "red"
MouseArea{
anchors.fill: parent
onClicked: root.mySignal() //点击时发送mySignal信号
onPressed: rect.color = "darkred"
onReleased: rect.color = "red"
}
}
}
//main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Text {
id: txt
text: qsTr("text")
//在目标组件里设置定义槽,需要指定id
Connections{
target: m_rect //需要指定id
onMySignal: txt.text = "hello new text"
}
}
MySigRect{
id: m_rect
y: 100
}
}
利用Connections方法的好处是可以单独建一个组件(上述例子当中的Text可以给它单独建一个组件),这个组件需要知道信号的实体id,槽的实现是由这个组件定义的。
下面是单独分离的组件的例子:

本文详细介绍了如何在Qt Quick QML中使用信号槽进行组件间通信,包括直接连接、Connections组件、带参数的信号,以及C++与QML之间的双向连接实例。通过实例演示了如何在MySigRect组件发送信号,MyText组件接收并处理信号的变化。
最低0.47元/天 解锁文章
976

被折叠的 条评论
为什么被折叠?



