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)
            }
        }
    }
}


相关文章
|
7月前
|
编译器 C++ 开发者
QT基础【7-跨进程发送信号】
QT基础【7-跨进程发送信号】
|
7月前
|
Unix
网络编程之 信号捕捉器(函数指针与回调函数)(2)
sigaction()函数 前面我们讲到的内容已经足以用来防止僵尸进程生成的代码。之所以博主还要介绍sigaction()函数是因为它类似于signal()函数,而且完全可以代替后者,也更稳定(主要是书上介绍到了
70 1
|
7月前
|
Linux
网络编程之 信号捕捉器(函数指针与回调函数)(1)
接着我们的信号说下去 之前博主给大家分享到了信号的概念和初步介绍signal函数的形式后就没有继续往下介绍了,实在是因为时间不够,那个时候博主还要上课,现在博主放假了就好好给大家分享一下如何注册信号捕捉,以及信号捕捉器的妙用。
73 1
|
2月前
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
99 3
(8)Qt中的自定义信号
|
3天前
|
传感器 安全
第四问:QT中信号和槽原理
Qt的信号与槽机制是观察者模式的典型实现,允许对象间通信而不直接依赖。信号用于通知事件发生,槽是响应信号的函数,通过`QObject::connect()`连接。这种机制实现了松耦合、灵活扩展和自动通知,适用于UI更新和数据绑定等场景。
15 1
|
4月前
【qt】QTcpSocket相关的信号
【qt】QTcpSocket相关的信号
27 0
|
7月前
|
图形学 C++ 容器
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
|
5月前
|
C++
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
112 0
|
7月前
|
编译器 API
【Qt】- 信号和槽函数
【Qt】- 信号和槽函数
|
7月前
|
JavaScript 前端开发 安全
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
799 1