Qt 信号和槽机制

一. 简介

        在Qt中使用信号和槽机制来完成对象之间的协同操作。简单来说,信号和槽都是函数,比如按下窗口上的一个按钮后想要弹出一个对话框,那么就可以将这个按钮的单击信号和我们定义的槽关联起来,在这个槽中可以创建一个对话框,并且显示它。这样,当单击这个按钮时就会发射信号,进而执行我们的槽来显示一个对话框。

        实际上,我们一般需要自己实现的是槽函数。槽函数即:接收到信号后所要执行的动作。

二. 声明

/** 使用关键字:signals,来声明信号函数*/
signals:void sig_updateNtpTime(QString *time);/** 使用关键字:slots,来声明槽函数。* 一般槽函数需要指明权限:public/private/protected等*/
public slots:void slot_receiveTime(QString *time);

注意: 槽一般使用slots关键字进行修饰(Qt 4中必须使用,Qt 5以后使用新connect语法时可以不用,为了与一般函数进行区别,建议使用)

三. 信号的类别

1)基于部件对象,可以使用其类中自带的信号(比如:按钮部件,其类中自带的信号)

/* * 1)clicked(): 被点击* 2) clicked(bool):被点击,区分是否被选中(一般在单选框部件中使用)* 3)pressed(): 按钮被按下* 4)released(): 按钮被松开*/

2)自定义信号

/** 使用关键字:signals,来自定义信号*/
signals:void sig_updateNtpTime(QString *time);

四. 信号和槽的关联方式

1.  使用connect()函数关联

// 函数原型
QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
// connect()函数中的四个参数分别是:发送信号的对象、发送的信号、接收信号的对象和要执行的槽。

信号触发形式:

1)使用部件对象自带的信号

connect(ui->button, SIGNAL(clicked()), this, SLOT(slot_exitsCardsDevice()));
// 当点击按钮button时,触发信号-->执行槽函数 slot_exitsCardsDevice().

2)使用自定义的信号

connect(ui->functionBtn_1, SIGNAL(sig_mouseReleaseEvent()), this, SLOT(slot_functionBtn_1_clickedX()));//使用关键字:emit,来触发自定义信号emit sig_mouseReleaseEvent();//执行后,触发槽函数 slot_functionBtn_1_clickedX()

2. 自动关联

        在设计模式中的UI主设计区,选择需要操作的部件,右击,在弹出的菜单上选择“转到槽”,根据需求选择对应的槽函数。

        自动关联就是将关联函数整合到槽命名中。 例如on_pushButton_clicked()就是由字符“on”和发射信号的部件对象名,还有信号名组成。这样就可以去掉那个connect()关联函数了。每当pushButton被按下,就会发射clicked()信号,然后就会执行on_pushButton_clicked()槽。

//对名称为 pushButton_save 的按钮进行的 按下和释放 动作的槽函数
void frmTelBook::on_pushButton_save_pressed()
{//
}void frmTelBook::on_pushButton_save_released()
{//
}

注意:一般自动关联方式的槽函数数目较少,选择性叫少。

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

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

相关文章

Linux相关命令使用

一、Vi与Vim编辑器 1、正常模式 以vim打开一个档案就直接进入一般模式了,在这个模式中,你可以使用【上下左右】移动光标,可以使用【删除字符】或【删除整行】来处理档案内容,也可以使用【复制、粘贴】来处理你的文件数据。 2、…

训练DAMO-YOLO(damoyolo_tinynasL25_S.py)

文章目录 参考链接1 准备数据1.1 转为COCO格式1.2 指明数据路径 2 设置训练配置文件,在configs/damoyolo_tinynasL25_S.py进行如下两块修改2.1 关于训练参数的设置2.2 根据自己数据集设置 3 开始训练4 调用tools/eval.py进行测试5 训练时可能遇到的报错5.1 RuntimeE…

前端JS实现全屏和退出全屏的效果

全屏效果想必我们都很清楚把,平时追剧看电视剧什么都会使用全屏方便我们看,我们键盘的第一个键esc可以退出全屏,那么我们如何用js实现全屏的办法呢? 设置全屏 Document.requestFullscreen(),该方法用于异步请求使元素…

详解Matlab深度学习进行波形分割

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

【DB】Redis缓存优化策略之,缓存预热与缓存清除

文章目录 1、什么是缓存优化?2、缓存预热3、缓存清除/更新4、reids缓存预热与清除5、总结 1、什么是缓存优化? 缓存是一种数据存储技术,用于存储经常访问的数据,以便在需要时快速获取。通过缓存数据,可以减少数据的访…

mysql进阶-深度为2的B+Tree树能存储多少行数据?

目录 1. 非叶子节点计算 2. 叶子节点存储的是完整的数据。 3. 整体计算 BTree树需要计算有叶子节点和非叶子节点。 假设一张商品表的数据结构如下: CREATE TABLE t_good (good_id int(12) NOT NULL AUTO_INCREMENT COMMENT 主键,good_name varchar(20) DEFAULT…

深度学习的基本概念汇总

这里小小总结一下看论文时常见到的名词,不用再一个个搜索啦!!! 1.batch size batch size是指在训练集中取的样本数,batch的size设置的不能太大也不能太小,因此实际工程中最常用的就是mini-batch&#xff0c…

C#编程-实现委托

实现委托 委托是可以存储对方法的引用的对象。在C#中,委托允许您动态地改变类中方法的引用。 考虑咖啡售货机的示例,它配置不同口味的咖啡,例如卡布奇诺咖啡和黑咖啡。在选择所需口味的咖啡时,售货机决定混合各种成分,例如奶粉、咖啡粉、热水、卡布奇诺咖啡粉。所有的材…

.Net Core 使用 AspNetCoreRateLimit 实现限流

上一篇文章介绍过ASP.NET Core 的 Web Api 实现限流 中间件-CSDN博客 使用.NET 7 自带的中间件 Microsoft.AspNetCore.RateLimiting 可以实现简单的Api限流,但是这个.NET 7以后才集成的中间件,如果你使用的是早期版本的.NET,可以使用第三方库…

React函数式组件学习笔记

React是一种用于构建用户界面的JavaScript库,它采用组件化的方式来构建复杂的UI。在React中,函数式组件是一种声明式的方式去描述UI的状态和行为。 React的特性 1.声明式设计-React采用声明范式,可以轻松描述应用 2.高效-React通过对DOM的模…

LaTeX系列1——主结构

初学,可交流,轻喷 \documentclass{book} \begin{document} \title{Book Title} \author{Author Name} \date{\today} \maketitle\chapter{Introduction} This is the introduction chapter of the book.\section{First Section} The first section of t…

【算法】使用栈解决一系列算法题(匹配、表达式、模拟)(C++)

1. 前言(栈适用于解哪些题?) 栈适合解决需要后进先出(LIFO)的结构的算法题,例如: 括号匹配问题:判断给定字符串中括号是否匹配。表达式求值问题:将表达式转换为后缀表达…

笙默考试管理系统-MyExamTest----codemirror(71)

笙默考试管理系统-MyExamTest----codemirror(71) 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest---…

C++/WinRT 中的字符串处理

利用 C/WinRT,你可以使用 C 标准库宽字符串类型(如 std::wstring)调用 Windows 运行时 API(注:不要使用窄字符串类型,例如 std::string)。 C/WinRT 确实有名为 winrt::hstring 的自定义字符串类…

js 常用基础 老写不出来的问题记录--持续更新

1、result返回一个数组 数组包含多个对象数组对象 要这个数组对象的其中两个属构成新的数组对象 这个时候就使用到了map函数 map可以映射原本数组中的每个元素 返回一个新的数组 result.map(item > { return { id:item.id, name:item.talentsName }})//定义新数组的每项数…

《每天一分钟学习C语言·十二》各种指针问题

1、 int arr; int * restrict pt &arr; *pt 100; *arr 10;注:restrict只能修饰指针,被restrict修饰的指针指向一块内存后这块内存就归这个指针管理了,其他任何指针都不能修改这块内存的内容,这是一个约定,当…

vue+js 实现将变量参数写至Cookie中,并进行读取,可以一次性写入多个值

vuejs 实现将变量参数写至cookie中&#xff0c;并进行读取&#xff0c;可以一次性写入多个值 【使用Vue和JavaScript将变量参数写入cookie并进行读取的示例代码】 <template><div><button click"writeToCookie">写入Cookie</button><but…

BGP安全特性详解(不看后悔!!!)

BGP安全特性 一、MD5认证 BGP认证只支持MD5认证&#xff0c;没有明文认证&#xff1b;BGP报文中没有设计认证字段&#xff0c;认证信息是存放到TCP报文中的option字段携带。 配置命令&#xff1a; peer x.x.x.x password cipher xxxx 二、GTSM GTSM&#xff0c;有效防止基…

微信公众号注册(详细图文教程)

目录 一、公众号注册准备1.1 准备事项1.2 个人注册1.3 企业注册 二、公众号注册2.1 基本信息填写2.2 选择类型2.3 信息登记2.4 公众号信息2.5 修改头像2.6 自动回复消息 三、总结 一、公众号注册准备 1.1 准备事项 公众号名称&#xff1a;公众号名称可以由中文、英文、数字、…

李宏毅LLM——ChatGPT原理剖析

文章目录 Chat-GPT引言关键技术——预训练研究问题玩文字冒险游戏 ChatGPT原理剖析 Chat-GPT引言 直观感受&#xff1a;结果有模有样、每次输出结果都不同、可以追问、幻想出的答案误解&#xff1a;罐头回答、答案是网络搜索的结果真正做的事&#xff1a;文字接龙&#xff0c;…