Qml:信号

简介: Qml:信号
//test_signal.qml
import QtQuick
import QtQuick.Controls
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
    Rectangle
    {
        Component.onCompleted:
        {
            print("Rectangle onCompleted")
        }
        Component.onDestruction:
        {
            print("Rectangle onDestruction")
        }
    }
    property Item myItem:Item
    {
        Component.onCompleted:
        {
            print("property Item onCompleted")
        }
        Component.onDestruction:
        {
            print("property Item onDestruction")
        }
    }
    Button
    {
        /*
        canceled()
        clicked()
        doubleClicked()
        pressAndHold()
        pressed()
        released()
        toggled()
        */
        text:"test signal"
        onClicked:
        {
            print("Button onClicked")
        }
        onPressed:
        {
            print("Button onPressed")
        }
    }
    //signal <name>[([<type> <parameter name>[, ...]])]
    //接收信号通知,定义一个名为on<Signal> 函数,其中<Signal>是信号的名称,第一个字母大写
    Button
    {
        y:30
        text:"mySignal"
        signal mySignal
        signal mySignalPara(int index,string str)
        onClicked:
        {
            mySignal()
            mySignalPara(99,"InButonnStr")
        }
        //on<Signal>
        onMySignal:
        {
            print("call onMySignal1 ")
        }
        onMySignalPara:(i,s)=>
        {
            print("call onMySignalPara "+ i+":"+s)
        }
    }
    Rectangle
        {
            x:100
            width: 100
            height: 100
            color:"red"
            property real size: 1.0
            //on<Property>Changed 的形式编写,其中<Property>是属性的名称,第一个字母大写
            onSizeChanged:
            {
                width = size*100
                height = size*100
            }
            Button
            {
                text: "Change size"
                onClicked: parent.size+=0.1
            }
        }
        ///手动将信号连接到方法
    Item
    {
        signal testConnectSig
        function testConnectInitSlot()
        {
            print("call testConnectInitSlot")
        }
        function testConnectSlot()
        {
            print("call testConnectSlot")
        }
        function testConnectSlot2()
        {
            print("call testConnectSlot2")
        }
        Button
        {
            text:"test connect"
            x:250
            onClicked:
            {
                //绑定信号和槽函数
                //可以多次绑定同一个槽函数
                parent.testConnectSig.connect(parent.testConnectSlot)
                parent.testConnectSig.connect(parent.testConnectSlot)
                parent.testConnectSig.connect(parent.testConnectSlot2)
                parent.testConnectSig()
                //同一个槽函数只需要销毁一次
                print("-------------------------------")
                parent.testConnectSig.disconnect(parent.testConnectSlot)
                parent.testConnectSig()
                parent.testConnectSig.disconnect(parent.testConnectSlot2)
            }
        }
        //对象创建
        Component.onCompleted:
        {
            testConnectSig.connect(testConnectInitSlot)
        }
        //对象销毁
        Component.onDestruction:
        {
            testConnectSig.disconnect(testConnectInitSlot)
        }
    }
    Item
    {
        //测试多个类型(QML文件)之间的信号槽传递
        MyType
        {
            id:mytype
            y:100
        }
        Rectangle
        {
            id:rect
            width:200
            height:200
            color:"green"
            x:200
            y:100
            function recvSetSize(w,h)
            {
                print("recvSetSize " + w +":"+h)
                x+= w-width
                width = w;
                height = h
            }
        }
        Component.onCompleted:
        {
            mytype.setSize.connect(rect.recvSetSize)
        }
    }
    Connections
    {
        target:mytype
        function onSetSize(w,h)
        {
            print("Connections "+w+":"+h)
        }
    }
}
//MuType.qml
import QtQuick
import QtQuick.Controls
Item
{
    signal setSize(int w,int h)
    Rectangle
    {
        width:200
        height:200
        color:"blue"
        Button
        {
            text:"test connect signal"
            onClicked:
            {
                print("MyType Button onClicked")
                parent.width += 5
                parent.height += 5
                setSize(parent.width,parent.height)
            }
        }
    }
}


相关文章
|
6月前
QT自定义信号,信号emit,信号参数注册
使用signals声明返回值是void在需要发送信号的地方使用emit 信号名字(参数)进行发送在需要链接的地方使用connect进行链接ct进行链接。
62 0
QT自定义信号,信号emit,信号参数注册
|
1月前
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
61 3
(8)Qt中的自定义信号
|
3月前
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)
|
3月前
|
Linux C++
【Qt】信号与槽(上)
【Qt】信号与槽(上)
【Qt】信号与槽(上)
|
3月前
【qt】QTcpSocket相关的信号
【qt】QTcpSocket相关的信号
18 0
|
3月前
【qt】有点意思的信号与槽
【qt】有点意思的信号与槽
18 0
|
4月前
|
C++
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
|
6月前
|
编译器 API
【Qt】- 信号和槽函数
【Qt】- 信号和槽函数
|
6月前
|
JavaScript 前端开发 安全
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
684 1
|
6月前
|
数据可视化 安全 程序员
【Qt】—— 信号与槽
【Qt】—— 信号与槽