Qml中信号的发送与接收信号槽函数的使用

2023-11-18

        在Qt/C++中,发送信号的函数和对应的槽函数在参数顺序、类型方面必须保持一致,此外,要让一个信号发射后进入相应的槽函数,必须用connect进行连接,这样,信号和槽才能连接起来。在QML中,发送信号和接受信号的槽,用起来比Qt/C++还更方便,用法如下:
1. 定义信号: signal sigFunc(type param)进行定义
2. 发送时信号:emit: sigFunc(parameter);

3. 接受信号的槽:onSigFunc: { //...; //接收发送过来的参数时,直接用信号定义时的形参param即可 }

例子:
ImageItem.qml文件如下:

import Material 0.1
import QtQuick 2.4
import QtQuick.Layouts 1.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Rectangle {
    id: rect
    border.color: "red"
    width: 150
    height:150
    signal testClicked(color colParam);	//该文件中发送带参信号

    Image {
        id:img
        anchors.fill: parent
        fillMode: Image.PreserveAspectFit
        source:"12345.jpg"
    }

    MouseArea {
        id: big_mouse
        anchors.fill: parent
        property point clickPos: "0,0"

        onPressed: {
            clickPos = Qt.point(mouse.x,mouse.y)
            console.log("onPressed:", mouse.x,mouse.y)

            emit: testClicked("red");	//发送带参的信号
        }
        onPositionChanged: {
            var deltdata = Qt.point(mouseX-clickPos.x, mouseY-clickPos.y);
            rect.x += deltdata.x
            rect.y += deltdata.y
        }
    }
}
ImageTest.qml文件如下:

import Material 0.1
import QtQuick 2.4
import QtQuick.Layouts 1.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Window {
    id: win
    visible: true
    property string windowBgColor: "white"

    width: 300
    height:300
    x:100
    y:100

    MouseArea {
        anchors.fill: parent

        onWheel: {
            if (wheel.angleDelta.y > 0) {
                rect.width += 5;
                rect.x -= 2

                rect.height += 5;
                rect.y -= 2
            }
            else {
                rect.width -= 5;
                rect.x += 2

                rect.height -= 5;
                rect.y += 2
            }
        }
    }
    ImageItem {
        id: rect
        onTestClicked: {	//响应signal testClicked(color colParam);信号
            console.log("emit parameter", colParam);
            rect.color = colParam;	//运用时,直接用形参名即可
        }
    }
}
以上代码,在ImageItem中当点击时发送信号testClicked并携带一个参数color,在ImageTest中接收该信号,并运用携带的color参数改变了北背景颜色,以上qml可以直接运行试看效果。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qml中信号的发送与接收信号槽函数的使用 的相关文章

  • 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器

    第1章 引言 随着互联网应用的广泛普及 海量数据的存储和访问成为了系统设计的瓶颈问题 对于一个大型的 互联网应用 每天几十亿的PV无疑对数据库造成了相当高的负载 对于系统的稳定性和扩展性造成了极大的问题 通过数据切分来提高网站性能 横向扩展
  • Tensorflow SSD实现与理解

    Tensorflow SSD实现与理解 1 论文解读 1 1 模型特点 2 1 训练特点 2 网络结构 2 1 特征提取卷积层 2 2 anchor box产生 3 TensorFlow 实现 3 1 运行图片检测 3 2 运行camera
  • django指定本地,局域网,外网访问

    本地和局域网访问 设置settings ALLOWED HOSTS 启动0 0 0 0 8000启动 其他局域网下使用 服务电脑的ip ipconfig获取 ipv4 192 168 x x 端口 外网访问 1 部署到云服务器 2 内网做端
  • Android开发从零开始

    http blog csdn net coolszy http 115 com folder faexml7y7 http www cnblogs com coolszy category 288258 html

随机推荐

  • 点云 pillar 形状的数据搜索

    读取点云数据 将点云数据中的某一个维度设置为0 生成一个新的点云数据 并建立其上的KDTree索引 给定查询点并对查询点进行半径搜索 并将半径邻域内的点渲染为红色 最后得到就是该点范围内 一个圆柱形的附近点集合 最后将可视化结果展示出来 代
  • 在Java平台中创建、使用分数类

    由于计算机的运行机制不像人类的大脑 所以在计算时并不能无限精度地运算下去 只能在一定的进度范围内进行数值求解 因此 至今计算机里都没有分数这种数据类型 不过我们为你可以借助Java类来自行定义分数类 进行分数的相关计算 下面直接给代码 pu
  • JDK安装指导

    Oracle官网地址 https www oracle com java版本查询 这里仅标识了java19和java17 java archived 查看更多 随便进入一个 根据后缀提示下载对应包即可 Linux安装 示例 java 1 8
  • [QT]day3

    1 一个闹钟 widget cpp include widget h include ui widget h include
  • FPGA的基本设计流程

    FPGA开发主要包括系统设计 设计输入 功能仿真 综合优化 综合后仿真 实现与布局布线 时序方针与验证 板级方针与验证 芯片编程与调试等9个部分 如下图所示 1 电路设计 在系统设计之前 首先要进行的是方案论证 系统设计和FPGA芯片选择等
  • PCL—低层次视觉—点云分割(RanSaC)

    点云分割 点云分割可谓点云处理的精髓 也是三维图像相对二维图像最大优势的体现 不过多插一句 自Niloy J Mitra教授的Global contrast based salient region detection出现 最优分割到底鹿死
  • 教程来啦!5分钟快速学习使用Tbarcode Office创建条码!

    Tbarcode Office是一款具有强大功能的条形码插件 无论在 Microsoft Word 还是在 Excel 中设置条码都非常的轻松 TBarCode Office 无缝集成在Microsoft Word和Microsoft Ex
  • Mybatis-Plus 实现用户ID自增出现的问题

    问题描述 项目基于 SpringBoot MybatisPlus 3 5 2 使用数据库自增ID时 出现重复键的问题 自增ID介绍 1 局部式配置 如下述代码所示 通过 TableId 字段来指定自增字段 Value 为数据库字段名 可以大
  • Kotlin与Java的异同(一)

    本文章只为了方便查阅 文章目录 Kotlin简介 Kotlin与Java的异同 1 函数 2 变量 变量类型 可变变量 不可变变量 3 类和属性 有参数的构造方法 setter 和 getter 4 枚举和 when 枚举 when 5 w
  • vim打开文件并跳转

    vim filename n 打开文件并跳转到指定行 vim filename pattern 打开文件并跳转到指定匹配字符
  • openpose&3d-pose-baseline搭建

    1 openpose如果遇到gstreamer的问题 把gstreamer 1 0 apt remove掉以后 重新装gstreamer 0 1 并且打开opencv cmakelist里的相关选项 然后重新make opencv 就解决了
  • 剑指offer-解决面试题的思路

    大家好 我是Nefelibat 在博客上记录算法笔记 是因为想push自己每天坚持刷几道算法题 同时也希望能把自己总结到的经验分享给大家 希望大家阅读愉快 目录 在写代码之前明确自己做的事情是什么 该怎么做 画图让抽象问题形象化 题目 二叉
  • Gin之获取path参数

    文章目录 Gin之获取path参数 1 path参数介绍 2 获取一个 path参数 Param方法 3 获取二个 path参数 Param方法 4 获取 path参数 Param方法 5 获取一个 path参数 ShouldBindUri
  • python语法(高阶)-设计模式(单例模式)

    参考内容 黑马程序员
  • ObjectC基础之块(Block)学习

    用Java语言来说 OC中的Block有着类的感觉 但OC的类与block又有着不同之处 OC的类有 m和 h文件 即 interface 与 implementation 而Block却没有类 但是它有着属性 举个Block例子 Bock
  • 洛谷P1028 [NOIP2001 普及组] 数的计算 —— 简单DP+双指针优化

    This way 题意 给出自然数 n n n 要求按如下方式构造数列 只有一个数字 n n n 的数列是一个合法的数列 在一个合法的数列的末尾加入一个自然数 但是这个自然数不能超过该数列最后一项的一半 可以得到一个新的合法
  • 【区块链与密码学】第6-7讲:SM9数字签名算法

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 6 7 SM9数字签名算法 为了降低
  • C#如何写入二进制文件

    我们在程序运行过程中有时需要将一些数据以二进制的形式记录到文本中 相比普通的文本记录方式 二进制的记录需要先将原始数据转换为byte 格式 再通过二进制文件流进行记录 下面小编就来介绍一下C 中二进制文件的详细记录过程 工具 原料 Micr
  • ElasticSearch添加mapping

    1 创建索引 创建索引 param indexName public static void createIndex String indexName 插入前删除 以免报错 boolean flag client admin indices
  • Qml中信号的发送与接收信号槽函数的使用

    在Qt C 中 发送信号的函数和对应的槽函数在参数顺序 类型方面必须保持一致 此外 要让一个信号发射后进入相应的槽函数 必须用connect进行连接 这样 信号和槽才能连接起来 在QML中 发送信号和接受信号的槽 用起来比Qt C 还更方便