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


目录
打赏
0
0
0
0
8
分享
相关文章
kde
|
5天前
|
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
3086 8
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
569 0
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
833 9
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
本文详细介绍了Maven的项目管理工具特性、安装步骤和配置方法。主要内容包括: Maven概述:解释Maven作为基于POM的构建工具,具备依赖管理、构建生命周期和仓库管理等功能。 安装步骤: 从官网下载最新版本 解压到指定目录 创建本地仓库文件夹 关键配置: 修改settings.xml文件 配置阿里云和清华大学镜像仓库以加速依赖下载 设置本地仓库路径 附加说明:包含详细的配置示例和截图指导,适用于各种操作系统环境。 本文提供了完整的Maven安装和配置
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
【保姆级图文详解】大模型、Spring AI编程调用大模型
【保姆级图文详解】大模型、Spring AI编程调用大模型
347 7
【保姆级图文详解】大模型、Spring AI编程调用大模型
Excel数据治理新思路:引入智能体实现自动纠错【Python+Agent】
本文介绍如何利用智能体与Python代码批量处理Excel中的脏数据,解决人工录入导致的格式混乱、逻辑错误等问题。通过构建具备数据校验、异常标记及自动修正功能的系统,将数小时的人工核查任务缩短至分钟级,大幅提升数据一致性和办公效率。
DeepSeek R1+Open WebUI实现本地知识库的搭建和局域网访问
本文介绍了使用 DeepSeek R1 和 Open WebUI 搭建本地知识库的详细步骤与注意事项,涵盖核心组件介绍、硬件与软件准备、模型部署、知识库构建及问答功能实现等内容,适用于本地文档存储、向量化与检索增强生成(RAG)场景的应用开发。
367 0
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
阿里云推出基于场景的解决方案免费试用活动,新老用户均可领取100点试用点,完成部署还可再领最高100点,相当于一年可获得最高200元云资源。覆盖AI、大数据、互联网应用开发等多个领域,支持热门场景如DeepSeek部署、模型微调等,助力企业和开发者快速验证方案并上云。
304 22
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
FLUX.1 Kontext 的全生态教程来啦!AIGC专区在线试玩!
Flux.1 Kontext [dev] 开源模型大家都用上了吗?小编汇总了3个使用教程,打包送上!
418 1

热门文章

最新文章

AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等