Signal和slot的声明和连接
信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。
Signal和slot的声明(一)
在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何定义在一个类中定义signal和slot
信号的定义:
siganls:
void mySignal();
void mySignal( int x );
void mySignal( int x, int y );
其中signals是Qt的关键字,而不是C/C++的关键字。此外信号与一般函数的区别是,它的所有返回值都是void,并且它没有函数实现体,它的函数体是moc自动生成的。
槽的定义:
public slots:
void mySlot();
void mySlot( int x );
不同类型的slot有不同的操作权限,具体看slot是public、protected还是private。
class Employee : public QObject
{
Q_OBJECT
public:
Employee() { mySalary = 0; }
int salary() const { return mySalary; }
public slots:
void setSalary(int newSalary);
signals:
void salaryChanged(int newSalary);
private:
int mySalary;
};
Signal和slot的声明(二)
Signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在事件处理结束后发出signal
void Employee::setSalary(int newSalary)
{
if (newSalary != mySalary)
{
mySalary = newSalary;
emit salaryChanged(mySalary);
}
}
注意,只有newSalary != mySalary时才发出salary-Changed()信号,这样避免了死循环的出现。
槽和普通的c++成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的 (protective),也可是私有的(private),它们可以象任何c++成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和 一个信号相连接,只要信号发出了,这个槽函数就会自动被调用,这个任务是由connect函数来实现的。
connect函数语法如下:
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender和receiver是QObject对象指针,signal和slot是不带参数的函数原型。SIGNALE()和SLOT()宏的作用是把他们转换成字符串。
信号和槽的一些使用规则:
1、一个信号可以连接到多个槽:
connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int)));
当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。
2、多个信号可以连接到一个槽
connect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError()));
connect(calculator, SIGNAL(divisionByZero()),this, SLOT(handleMathError()));
任何一个信号发出,槽函数都会执行。
3、一个信号可以和另一个信号相连
connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SIGNAL(updateRecord(const QString &)));
第一个信号发出后,第二个信号也同时发送。除此之外,信号与信号连接上和信号和槽连接相同。
4、连接可以被删除
disconnect(lcd, SIGNAL(overflow()),this, SLOT(handleMathError()));
这个函数很少使用,一个对象删除后,Qt自动删除这个对象的所有连接。
5、信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接:
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),this, SLOT(proce***eply(int, const QString &)));
如果信号里的参数个数多于槽函数的参数,多余的参数被忽略:
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),this, SLOT(checkErrorCode(int)));
如果参数类型不匹配,或者信号和槽不存在,在debug状态时,Qt会在运行期间给出警告。如果信号和槽连接时包含了参数的名字,Qt将会给出警告。
转载于:https://blog.51cto.com/8935291/1569918
相关文章:

重磅!深度学习知识总结和调参技巧开放下载了
近年来,人工智能正在进入一个蓬勃发展的新时期,这主要得益于深度学习和CV领域近年来的发展和成就。在这其中,卷积神经网络的成功也带动了更多学术和商业应用的发展和进步。为了避免“内卷”,更多人选择学习进阶,但是仍…

Oracle优化器:星型转换
Oracle 8i中引入了星型转换(star transformation)的优化器新特性以便更有效地处理星型查询。星型查询语句多用于基于星型模型设计的数据仓库应用中。星型模型的称谓源于该种模型以图形化表现时看起来形似一颗海星。这颗星的中央会由一个或多个事实表(fact tables)组成ÿ…

php安装模式mod_php和Fastcgi的选择与对比
安装php又面临到了模式的选择,以前都是选择mod_php模式,因为这样安装比较方便哈,今天突然关心起FastCGI这种模式,败毒了一把,找到了一些关于mod_php和Fastcgi的选择与对比这方面的讨论,现在发出来留一个记号…

暴雨之后,评估与重建可以用这个数据集
作者:神经星星来源:HyperAI超神经场景描述:连续多日的暴雨给郑州和河南部分城市,带来了严重的洪涝灾害,牵动了全国人民的心。灾难面前,现阶段的科技和具体解决方案,也能发挥出关键作用。关键词&…

从jQuery的缓存到事件监听
很久以前,我还在cnblogs里面逛的时候就提出过一个问题(刚找了半天没找到)。不知道大家有没有发现,用jQuery选择器"选择"之后的DOM上会添加jQuery*********属性。 <DIV idd1 jQuery1294122065250"1">abc…

对一些品种数量校正
update sphwph set shl1-1 where spidSPH00002323 and piciJHAYMA00017433_5 and hwHWI00000022 update sphwph set shl-11 where spidSPH00002323 and piciJHAYMA00021159_2 and hwHWI00000022 3月7日调拨后少了398 update sphwph set shl0398 where piciJHAYMA00024241_1 an…

收藏喜+1!值得使用的100个Python小技巧
目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手。你可以用它来完成很多任务,比如数据科学、机器学习、Web开发、脚本编写、自动化等。下面,给大家…

一款基jquery超炫的动画导航菜单
今天给大家分享一款基jquery超炫的动画导航菜单。这款导航菜单,初始时页面中间一个按钮,单击按钮,菜单从左侧飞入页中。再次单击按钮,导航飞入左侧消息。动画效果很非常炫。一起看下效果图: 在线预览 源码下载 实现的…

如何用C#动态编译、执行代码
在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。 一、CSharpCodeProvider 提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可…

【解决】MySql 5.6 运行崩溃错误
【解决】MySql 5.6 运行崩溃错误 最近弄了一台云主机,配置是20G磁盘空间,1G运行内存的Linux服务器。在上面安装了LAMP(RHEL7.2Apache2.4MySql5.6PHP5.6),然后搭建wordpress网站,可是网站运行没多久…

制作安全网站的checklist
原作者charlee、原始链接 http://tech.idv2.com/2008/04/19/secure-website-checklist/ fcicq最近在IPA上看到一篇安全相关的文章,它的最末尾有个checklist,于是催我把它翻译了。前几天比较忙,周末没什么事儿了,就翻译一下吧。 原…

百变冰冰!手把手教你实现CVPR2021最新妆容迁移算法
作者:小潘师兄来源:AI算法与图像处理简介在本文中,我们从不同的角度将妆容迁移问题分解为两步提取-分配过程。为此,我们提出了一种基于风格的可控GAN模型,该模型由三个部分组成,每个部分分别对应于目标风格…

Vlan 4096的限制原因
为什么80%的码农都做不了架构师?>>> VLAN配置的最大可能值为4094,它的由来如下所述: IEEE802.1q协议也就是“Virtual Bridged Local Area Networks”(虚拟桥接局域网,简称虚拟局域网)协议&#…

Hive 数据模型
Hive 数据模型 Hive 数据表有五种类型:内部表,外部表,分区表,桶表,视图表,默认以 tab 分隔 * MySQL (Oracle) 表默认以逗号分隔,因此,要想导入 MySQL(Oracle) 数据,需要设…

完整中英文世界国家级联下拉列表插件【前端版】
为什么80%的码农都做不了架构师?>>> 这个小东西是之前小项目上临时增加功能的产物,那时候在网上找了很久都没有能用的插件,要么是数据残缺少得可怜,还有就是实现手段非常低效不可维护那种,各种奇拔问题&am…

何时使用margin和padding?
margin和padding的意义相信大家都很清楚,可是在具体应用中,到底应该使用哪一个,就比较难于判断了。 这篇文章 说得挺清楚的,在这里翻译一下,供参考。 何时应当使用margin 需要在border外侧添加空白时。 空白处不需要…

10年IT老兵给新人程序员的几点建议
【CSDN 编者按】对于很多计算机专业的同学而言,“进大厂”已经成为毕业后职业道路的首选。但是面试官最喜欢什么样的应届生你知道吗?在校期间应该为找工作做哪些准备?除了技术好,在职场中还有哪些必备软实力?今天&…

asp.net文件上传下载的简单实现
使用FileUpload上传: protected void btnUpload_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { /*通过文件扩展名判断文件类型*/ string fileExt System.IO.Path.Ge…

JAVA数组的定义及用法
数组是有序数据的集合,数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素。 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; 当中类型(type)能够为Java中随意的数据类型,包含简单类型组合类型,数组名…

英特尔公布新技术路线图,将为 AWS、高通代工芯片
编译|刘春霖出品|AI科技大本营(ID:rgznai100)图源|IC photo今天英特尔宣布其旗下的工厂将开始制造高通芯片,并公布了公司有史以来最详细的制程工艺和封装技术路线图,希望在 2025 年前赶上台积电、三星电子。除了公布其近十多年来首个全新晶体管架构 Ribb…

epoll相关资料整理
http://www.cppblog.com/converse/archive/2008/10/13/63928.htmlepoll相关资料整理 学习epoll有一段时间了,最近终于有一个服务器采用了epoll模型,从中积累了一些epoll的资料.个人感觉目前可以找到的epoll相关的资料太少了,因为epoll仅被linux 2.6以上版本内核所支持,它的应用…

18.绝对路径和相对路径
什么是绝对路径(Absolute Pathname)? 1.绝对路径必定由“/”开头 2.绝对路径是为档案/文件的所在位置做指向 3.在任何时候,都可以用绝对路径来找到我们想要的文件 PS:绝对路径只对当前所在目录有效。 什么是相对路径&a…

IE的box模型显示bug
原作者charlee、原始链接http://tech.idv2.com/2007/01/02/ie-box-model-bug/以及本声明。 box模型即由<div>等块元素的 margin、padding、border、width、height 等属性构成的显示模型,它是CSS布局的基础。通过设置<div>的各种属性,可以得到…

AI 能匹敌程序员了吗?OpenAI 新研究展示 NLP 大模型的局限性
作者:Ben Dickson来源:数据实战派Codex在一篇新论文中,OpenAI 的研究人员展示了 Codex 的详细信息,它是一种生成软件源代码的深度学习模型。Codex 可以为 OpenAI 和 GitHub 联合开发的 “AI 配对程序员” 工具 Copilot 提供支持。…

MSLicensing中断远程桌面连接
---------------------------中断远程桌面连接---------------------------客户端无法建立跟远程计算机的连接。导致这个错误的可能的原因是:1) 远程计算机上的远程连接可能没有启用。2) 已超出远程计算机上的连接最大数。3) 建立连接时出现了一个网络错误。------------------…

如何恢复,迁移,添加, 删除 Voting Disks
如何恢复,迁移,添加, 删除 Voting Disks 恢复流程 在11gR2 之前,我们可以直接直接使用dd命令对voting disk进行备份。 DD示例 备份votedisk盘: [rootraw1 bin]# dd if/dev/raw/raw2 of/home/oracle/voting_disk.bak 恢复votedisk盘…

跨站脚本攻击(XSS)FAQ
原作者charlee、原始链接http://tech.idv2.com/2006/08/30/xss-faq/以及本声明。 该文章简单地介绍了XSS的基础知识及其危害和预防方法。Web开发人员的必读。译自 http://www.cgisecurity.com/articles/xss-faq.shtml。 简介 现在的网站包含大量的动态内容以提高用户体验&…

linux中的for命令
bash shell提供了for命令,用于创建通过一系列值重复的循环。每次重复使用系列中的一个值执行一个定义的命令集。for命令基本格式为:for var in listdo commandsdone1.读取列表中的值 #!/bin/bash #basic for command for test in a b c d e f doecho The…

终于有人把计算机视觉讲明白了 。。。
机器学习是目前比较热门的技术,包含深度学习、强化学习、对抗学习、对偶学习、迁移学习、分布式学习、以及元学习等内容。得益于大数据、大模型、大计算的发展,深度学习在计算机视觉、语音处理、自然语言方面相继取得了突破,达到甚至超过了人…

mysql启动与关闭(手动与自动)
手动管理mysql的启动与关闭 [rootmysql ~]# service mysql start --手动启动mysql Starting MySQL. SUCCESS! [rootmysql ~]# service mysql stop --手动关闭mysql Shutting down MySQL.. SUCCESS! [rootmysql ~]# mysqld --verbose --help --查看MySQL的默认参数的具体值 如果…