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


相关文章
|
1月前
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
65 3
(8)Qt中的自定义信号
|
14天前
|
C++
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
24 1
003 Qt_信号和槽-上
|
3月前
【qt】QTcpSocket相关的信号
【qt】QTcpSocket相关的信号
18 0
|
4月前
|
C++
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
|
6月前
|
编译器 API
【Qt】- 信号和槽函数
【Qt】- 信号和槽函数
|
6月前
|
编译器 C++ 开发者
QT基础【5-信号与槽】
QT基础【5-信号与槽】
|
6月前
PyQt5信号创建及发送
PyQt5信号创建及发送
51 0
|
编译器
Qt信号参数中使用QVariantList时编译问题
今天调试代码时遇到一个奇怪的问题,不过一般感觉比较奇怪的问题,最后查到原因时,原因都比较简单!
196 0
|
C++
Qt | 信号和槽的一些总结
学习使用Qt的信号槽机制。
414 0