项目描述:
举例说明在qml文件中的信号种类和使用方法。
参考链接:https://blog.csdn.net/FY_13781298928/article/details/128864687
Qml 文件中常见的信号共有3种:
- 控件本身的信号(点击,悬停,选中等)
- 属性发生变化时触发的信号
- 自定义信号
本身的信号:
Button{
anchors.centerIn: parent
width: 100
height: 50
text: "自带信号"
onClicked: {
console.log("点击...")
}
属性改变的信号:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
Window {
id:root
width: 640
height: 480
visible: true
title: qsTr("Hello Signal")
property int count: 0
onCountChanged: {
console.log("自定义的属性值 count 发生了变化...")
}
Button{
width: 100
height: 50
text: "属性信号"
onClicked: {
rect.color = "lightgreen"
}
}
Rectangle{
id:rect
anchors.centerIn: parent
width: 200
height: 200
color: "lightblue"
onColorChanged: {
console.log("rect自身的 color 属性发生了变化...")
count++ //更改自定义属性值
}
}
}
自定义信号:
关键字: signal
形式: signal + 信号名(参数)
例如:
signal myFunction()定义无参信号
signal myFunction(var name)定义带参信号
信号的响应:on + 信号名,注意信号名首字母要大写 —> 需要使用 Connections 控件进行监控
onMyFunction:{ } ,在打括号内写对应的处理函数
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
Window {
id:root
width: 640
height: 480
visible: true
title: qsTr("Hello Signal")
signal myFunction() //无参信号
signal myFunction2(var name) //带参信号
Connections{
target: root
onMyFunction:{
console.log("单击了矩形")
}
onMyFunction2:{
console.log("双击了矩形,其名称为:" + name) //此处的变量 name 是信号中传输过来的
}
}
Rectangle{
id:rect
anchors.centerIn: parent
width: 200
height: 200
color: "lightblue"
MouseArea{
anchors.fill: parent
onClicked: {
myFunction() //发射无参信号
}
onDoubleClicked: {
myFunction2(rect.color) //发射带参信号
}
}
}
}
自定义的信号可以在widget中进行链接:
QQuickItem *item = ui->quickWidget->rootObject();
connect(item, SIGNAL(sliderMoved(qreal)), this, SLOT(onSliderMoved(qreal)));
connect(item, SIGNAL(playClicked()), this, SLOT(onPlay()));
connect(item, SIGNAL(pauseClicked()), this, SLOT(onPause()));
connect(this, SIGNAL(sigPalyProgress(qreal)), item, SIGNAL(updatePlayProgress(qreal)));
使用 C++ 与嵌入窗口中的 QML 交互数据
使用 C++ 向嵌入窗口中的 QML 传递数据
//使用以下方式可向 qml 传递数据,在 qml 中直接使用 obj 即可
widget -> rootContext() -> setContextProperty(obj, value);
1
2
使用 C++ 获取嵌入窗口中的 QML 的对象
//使用以下方式可获取 qml 对象,并以 QQuickItem* 格式返回
QQuickItem* qmlItem = widget -> rootObject();