当前位置: 首页 > news >正文

qml信号与槽函数

目录

  • 信号与槽函数基础
    • 方法1-使用Connections
    • 方式2-使用connect(不常用)
  • 自定义组件与信号槽使用

信号与槽函数基础

方法1-使用Connections

main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    id:window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    //信号
    signal testSig(string s,int value)

    //Connections绑定信号和槽函数
    Connections{
        //发送信号组件id
        target:window
        //槽函数(使用On+信号名)    这种方式不被推荐
        onTestSig:{
            console.log(s,value)
        }
    }

    //点击按钮发送信号
    Button{
        width:50;
        height:50
        onClicked: {
            testSig("发送textSig信号","999")
        }
    }
}

上面的方式可读性太差,一般采用下面的方式

main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    id:window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    //信号
    signal testSig(string s,int value)

    //Connections绑定信号和槽函数
    Connections{
        //发送信号组件id
        target:window
        //槽函数(推荐使用这种 信号名+参数列表 的槽函数形式)
        function onTestSig(str,iValue){
            console.log(str,iValue)
        }
    }

    //点击按钮发送信号
    Button{
        width:50;
        height:50
        onClicked: {
            testSig("发送textSig信号","999")
        }
    }
}

方式2-使用connect(不常用)

//main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    //信号
    signal testSig(string s,int value)

    //槽函数
    function func(s,v){
        console.log(s,v);
    }

    //组件加载结束时绑定信号和槽函数组件加载结束时绑定信号和槽函数

    Component.onCompleted: {
        testSig.connect(func)
    }

    //点击按钮发送信号
    Button{
        width:50;
        height:50
        onClicked: {
            testSig("发送textSig信号","999")
        }
    }
}

上面两种方式的运行结果如下:
在这里插入图片描述

自定义组件与信号槽使用

//main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    id:window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    //组件
    Component{
        id:com
        Button{//按钮
            signal btnSig(int value)//定义信号
            onClicked: {
                btnSig(10)//发送信号
            }
        }
    }

    //加载自定义组件
    MyComponent{
        //按钮组件挂载到自定义组件中
        com1: com
        com2: com
    }
}
//myComponent.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Rectangle {
    width:400
    height:300
    property Component com1
    property Component com2
    border.color:"black"
    
    //动态加载组件
    Loader{
        id:loader1
        sourceComponent: com1
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 20
        anchors.right: parent.right
        anchors.rightMargin: 20
		//连接信号和槽
        Connections{
            target:loader1.item
            ignoreUnknownSignals: true//忽略不知道的的信号(防止报出警告)
            function onBtnSig(value){
                console.log("right:"+value)
            }
        }
    }
	//动态加载组件
    Loader{
        id:loader2
        sourceComponent: com2
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 20
        anchors.right: parent.right
        anchors.rightMargin: 150
		//连接信号和槽
        Connections{
            target:loader2.item
            ignoreUnknownSignals: true//忽略不知道的的信号
            function onBtnSig(value){
                console.log("left:"+value)
            }
        }
    }
}

在这里插入图片描述

相关文章:

  • 《命理学》专项探究与研习
  • css2学习总结之尚品汇静态页面
  • ragflow本地部署(WSL下Ubuntu)
  • Python Cookbook-5.7 在增加元素时保持序列的顺序
  • 人工智能通识速览(Part3. 强化学习)
  • OpenNMT 部署和集成指南
  • Dify 的介绍
  • Diffusion Policy Visuomotor Policy Learning via Action Diffusion官方项目解读(二)(4)
  • C++动态内存管理完全指南:从基础到现代最佳实践
  • Windows系统本地化部署DeepSeek+Open-WebUi
  • OpenBMC:BmcWeb 处理http请求4 处理路由对象
  • nginx管理nacos集群地址
  • mlir-tblgen 的应用渐进式示例
  • JS location对象
  • 【SQL】子查询详解(附例题)
  • 【C++DFS 马拉车】3327. 判断 DFS 字符串是否是回文串|2454
  • RFID手持机读写器功能模块硬件定制专属方案
  • Python 之 Pandas 常用操作
  • 从零开始学习Python游戏编程14-随机数1
  • 【AI】高效地使用 AI 模型的 Prompt(提示词)
  • 株洲品牌网站建设/百度爱采购优化
  • 临沂哪里有做网站/网络营销文案策划
  • wordpress模板代码在/搜索seo神器
  • 视频库网站建设/关键词挖掘工具免费
  • wordpress和织梦架构/神马搜索seo优化排名
  • 茶叶网站建设公司/微信小程序建站