QML_信号

项目描述:
举例说明在qml文件中的信号种类和使用方法。

参考链接:https://blog.csdn.net/FY_13781298928/article/details/128864687
Qml 文件中常见的信号共有3种:

  1. 控件本身的信号(点击,悬停,选中等)
  2. 属性发生变化时触发的信号
  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();

猜你喜欢

转载自blog.csdn.net/weixin_44248637/article/details/130089910
今日推荐