qml中的信号槽的几种方式

1、信号处理器

当对应的信号发射时,信号处理器(就是QtWidgets中的槽函数)会被qml引擎自动调用。
在qml的对象定义中添加一个信号,则自动在对象定义中添加一个相应的对象处理器,只不过没有具体的代码实现。
如下所示,在Rectangle类型中添加信号sendPosition,则自动会生成一个信号处理器onSendPosition,只需要按需求写具体的函数实现即可。

Rectangle {id: rect1width: 100height: 100color: "red"signal sendPosition(real x, real y)onSendPosition: {console.log("===> rect1 position is:> ", x, y)}MouseArea {anchors.fill: parentonClicked: {rect1.sendPosition(mouseX, mouseY)}}}

2、Connections类型

Connections对象可以接受指定目标(target)的任意信号。
如下所示的Connections对象,其target是rect2,表示其可以接受所有来自rect2的信号,并且可以根据需要决定是否需要写相应的槽函数。

Rectangle {id: rect2width: 100height: 100color: "green"signal sendPosition(real x, real y)signal sendPressed(string text)signal sendDoubleClicked(string text)MouseArea {anchors.fill: parentonClicked: {rect2.sendPosition(mouseX, mouseY)}onPressed: {rect2.sendPressed("rect2:> pressed...")}onDoubleClicked: {rect2.sendDoubleClicked("rect2:> doubleClicked...")}}Connections {target: rect2onSendPosition: {console.log("***> rect2 position is:> ", x, y)}onSendPressed: {console.log(text)}onSendDoubleClicked: {console.log(text)}}}

3、connect()函数

通常情况下,使用信号处理器已经能够满足大多数应用。但是,如果要把一个信号与一个或多个方法或者信号关联起来,这种语句就无能无力了。
为此,qml的信号对象提供了connect()函数,其支持将信号与一个方法或者另外的信号连接起来(信号链)

ApplicationWindow {// ... Rectangle {id: rect3width: 100height: 100color: "purple"signal sendPosition(real x, real y)signal sendSignalMouseArea {id: mouseAreaanchors.fill: parentonClicked: {rect3.sendPosition(mouseX, mouseY)}}}}function getPosition(xx, yy) {console.log("@@@> rect3 position is:> ", xx, yy)}function getSignal() {console.log("####> rect3.... -------------------")}Component.onCompleted: {// 将rect3的信号sendPosition通过connect()函数与getPosition()函数连接起来rect3.sendPosition.connect(getPosition)// 信号链// 将mouseArea的doubleClicked信号通过connect()与rect3的信号sendSignal连接起来// 当mouseArea的doubleClicked的信号发射时,rect3的信号sendSignal也自动被发射mouseArea.doubleClicked.connect(rect3.sendSignal)rect3.sendSignal.connect(getSignal)}// ...
}

4、完整测试代码

import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.3
import QtQml 2.12ApplicationWindow {id: pagewidth: 600height: 400visible: trueRow {// 1、信号处理器Rectangle {id: rect1width: 100height: 100color: "red"signal sendPosition(real x, real y)onSendPosition: {console.log("===> rect1 position is:> ", x, y)}MouseArea {anchors.fill: parentonClicked: {rect1.sendPosition(mouseX, mouseY)}}}// 2、Connections类型Rectangle {id: rect2width: 100height: 100color: "green"signal sendPosition(real x, real y)signal sendPressed(string text)signal sendDoubleClicked(string text)MouseArea {anchors.fill: parentonClicked: {rect2.sendPosition(mouseX, mouseY)}onPressed: {rect2.sendPressed("rect2:> pressed...")}onDoubleClicked: {rect2.sendDoubleClicked("rect2:> doubleClicked...")}}Connections {target: rect2onSendPosition: {console.log("***> rect2 position is:> ", x, y)}onSendPressed: {console.log(text)}onSendDoubleClicked: {console.log(text)}}}// 3、connect()函数Rectangle {id: rect3width: 100height: 100color: "purple"signal sendPosition(real x, real y)signal sendSignalMouseArea {id: mouseAreaanchors.fill: parentonClicked: {rect3.sendPosition(mouseX, mouseY)}}}}function getPosition(xx, yy) {console.log("@@@> rect3 position is:> ", xx, yy)}function getSignal() {console.log("####> rect3.... -------------------")}Component.onCompleted: {rect3.sendPosition.connect(getPosition)// 信号链mouseArea.doubleClicked.connect(rect3.sendSignal)rect3.sendSignal.connect(getSignal)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之void*指针

先看一个例子 #ifndef _Aspect_Handle_HeaderFile#define _Aspect_Handle_HeaderFile​#ifdef _WIN32 typedef void* HANDLE; typedef HANDLE Aspect_Handle;#else typedef unsigned long Aspect_Handle;#endif /* _WIN32 */​#endif /* _Aspect_Handle_Header…

基于SpringBoot+vue的在线视频教育平台的设计与实现,附源码,数据库

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【文件处理】spring boot 文件处理

接收文件 PostMappingpublic result<String> add(MultipartFile file) throws IOException {// 得到目标文件夹File directory new File("file");//如果文件夹不存在就创建if(!directory.exists()){directory.mkdirs();}//文件名称String fileName file.getO…

性能进阶:使用JMeter进行websocket测试【建议收藏】

本次测试案例主要是分享如何使用JMeter进行websocket协议下的聊天接口性能测试。 包含websocket插件的下载安装、线程组及sampler的设置、csv参数化和组建分布式测试的方法、如何通过调整参数来获得发压机的最大并发数以及对测试过程的总结。 整篇文章只侧重介绍进行websocke…

Linux中的软件包管理器yum

目录 1.什么是软件包 2.关于 rzsz 3.查看软件包 4.如何安装软件 5.如何卸载软件 1.什么是软件包 ● 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. ● 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理…

阿里云优惠券领取入口、使用教程,2024优惠券更新

阿里云优惠代金券领取入口&#xff0c;阿里云服务器优惠代金券、域名代金券&#xff0c;在领券中心可以领取当前最新可用的满减代金券&#xff0c;阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法&#xff1a; 阿里云优惠券…

C语言_存储结构实现_线性表

#include <stdio.h> #include <stdlib.h>#define MAX_SIZE 100 // 定义线性表的最大长度typedef struct {int data[MAX_SIZE]; // 用数组存储数据元素int length; // 线性表的当前长度 } SqList;// 函数声明 void initList(SqList *list); // 初始化线性表 int ins…

Linux下修改系统的运行级别

借助命令ll /etc/system/system/default.target可以查看当前的系统运行的级别&#xff1a;以下图为例运行级别就是3 但如果系统运行的级别默认为图形时&#xff0c;要将图形级别改为文本级别&#xff0c;可以按照下边两种方法运行&#xff1a; 1、重新设置链接文件 这个方法需…

wy的leetcode刷题记录_Day74

wy的leetcode刷题记录_Day74 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-1-22 前言 目录 wy的leetcode刷题记录_Day74声明前言670. 最大交换题目介绍思路代码收获 670. 最大交换 今天的每日一题是&#xff1a;670. 最大交换 …

03-常用编程概念

上一篇&#xff1a;02-编程猜谜游戏 本章介绍几乎所有编程语言中都会出现的概念&#xff0c;以及它们在 Rust 中的工作原理。许多编程语言的核心都有许多共同点。本章介绍的概念都不是 Rust 独有的&#xff0c;但我们会在 Rust 的上下文中讨论这些概念&#xff0c;并解释使用这…

Pymol-电子密度图展示方法-PDB数据库已发表结构和自己晶体解析得到的结构密度图

简单来说&#xff0c;想要用PyMol展示电子密度图可以归为以下两种&#xff1a; 一是展示PDB数据库中已发表数据的结构和Map的方式 以6sps.pdb为例&#xff0c;在pymol中导入该数据密度图时&#xff0c;可以无需下载对应的密度文件&#xff0c;直接用fetch即可&#xff1a; Py…

二维码地址门牌管理系统:预约安全、智能生活

文章目录 前言一、访客预约功能二、安全性保障三、智慧小区生活 前言 二维码地址门牌管理系统的出现不仅提升了小区的安全性&#xff0c;还为访客提供了更便捷的预约服务&#xff0c;让亲朋好友轻松进入小区。 一、访客预约功能 该系统提供了访客预约功能&#xff0c;业主可为…

关于Unity插件TriLib使用的一点儿心得

最近做一个项目的时候&#xff0c;由于要求动态加载fbx或者glb等格式文件&#xff0c;而我们自己开发加载插件难度又有点大&#xff0c;所以最后使用了TriLib这个插件&#xff0c;现在说一点使用心得。 由于文件加载之后要对加载的内容进行复制&#xff0c;比如加载一个柱子&am…

【Docker】部署和运行青龙面板:一个支持python3、javaScript、shell、typescript 的定时任务管理面板

引言 青龙面板是一个支持python3、javaScript、shell、typescript 的定时任务管理面板。 步骤 拉取镜像 从 Docker Hub 上拉取最新的 “qinglong” 镜像。 docker pull whyour/qinglong:latest启动容器 使用刚刚拉取的镜像来启动一个新的 Docker 容器。 docker run -dit \-v…

pikachu验证码绕过第三关攻略

打开pikachu靶场第三关&#xff1a; 挂上代理&#xff0c;随便输入账户密码&#xff1a; 返回bp。进行放包发现显示token错误。 每一次登录的返回包会带有token相关数据用于下一次的登录认证&#xff1a; 进行替换token值&#xff1a; 替换完成开始进行检点的爆破&#xff1a;…

准备的一些爬虫面试题

最近准备试试外面的市场&#xff0c;找找看外面的岗位&#xff0c;给自己找点后路&#xff0c;防止到时候被裁被动。 我将面试题分为基于scrapy框架与普通爬虫【requests/aiohttp等开发的爬虫】 普通爬虫面试题 列举反爬虫机制 (1) UA 检测&#xff0c;请求头合法性 (2) Rob…

Python使用HTTP代理进行API请求的优化

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中使用HTTP代理进行API请求的优化。 一、减…

10分钟快速上手LLM大模型Python前端开发(三)之显示模块(二)

【计划昵称全网统一&#xff0c;代码随想随记&#xff0c;知乎无法立即修改&#xff0c;&#xff0c;】 微信公众号&#xff1a;leetcode_algos_life&#xff0c;代码随想随记 小红书&#xff1a;412408155 CSDN&#xff1a;https://blog.csdn.net/woai8339?typeblog &#xf…

反序列化字符串逃逸(上篇)

首先&#xff0c;必须先明白&#xff0c;这个点并不难&#xff0c;我给大家梳理一遍就会明白。 反序列化字符串逃逸就是序列化过程中逃逸出来字符&#xff0c;是不是很简单&#xff0c;哈哈哈&#xff01; 好了&#xff0c;不闹了&#xff0c;其实&#xff1a; 这里你们只要懂…

Windows系统如何修改Nginx配置实现远程访问多个本地站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…