qml 信号与槽 (qml内部信号槽交互,qml与C++信号槽交互)

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

 

//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,槽的实现是由这个组件定义的。

下面是单独分离的组件的例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值