首页 > 其他分享 >信号与槽函数

信号与槽函数

时间:2024-08-19 22:28:20浏览次数:17  
标签:函数 对象 ui 信号 组件 QT

1.信号与槽函数的作用(通信机制)

用来在组件和组件,组件和窗口之间通信

温故知新: Linux中进程间通信signal(你要捕捉的信,函数指针)

信号:QT中给每个组件都定义了信号,每个信号都有它特定的触发条件QT中所有的信号,本质上都是个函数,但是有点特殊,信号只有声明,没有源代码

比如:以按钮为例,常用的信号如下

[signal void QAbstractButton:clicked(bool checked=false)//当按钮按下去,然后松开的时候自动触发这个信号槽函数:当某个信号触发的时候,跟这个信号对应的槽函数会被自动调用执行

2.如何关联信号与槽函数

第一种方法:借助集成开发环境,右键转到槽函数头文件中会自动生成槽函数的声明

private slots: //声明了一个私有的槽函数

void on_pushButton_clicked();//槽函数的原型声明

自动生成的槽函数,命名有规律

on_对象的名字_信号的名字();

第二种方法:程序员调用connect函数手动关联信号与槽函数

connect(Q0bject *sender, PointerToMemberfunction signal,QObject *receiver, PointerTolvemberfunction method)

参数 : sender --》信号的发送者,指针

   signal --》发送什么信号

   receiver --》信号的接收者

   method --》需要调用的槽函数

  槽函数命名时候,可以跟自动生成的槽函数命名规律保持一致,也可以自行单独命名

  比如:connect(ui->handlebt,SIGNAL(clicked(bool),this,SLOT(fun())); //关联了handlebt这个按钮的clicked信号和槽函数fun()

  QT使用技巧:头文件中声明了函数,右键选择refactor,可以在.cpp生成函数的定义

两种实现UI的做法

做法一:通过UI设计师界面直接拖组件

  QT会在构造函数的ui->setupUi(this);中帮你自动创建对象指针,并且分配堆空间(自动完成的)

  通过ui设计师界面直接拖组件过来使用的一定是堆空间

  做法二:程序员写代码,创建组件对象

  此时所有的组件都是你自己编写代码实现的,跟ui->setupUi(this)没有任何关系程序员自己编写代码创建对象无法就两种情况:

  情况一:使用栈空间 QPushButton mybt("登录",this);

  情况二:使用堆空间 QPushButton *mybt=new QPushButton("登录" this)

  2.这两种情况,我要使用组件对象,该如何使用?

  通过ui设计师界面直接拖组件过来ui->组件对象指针->成员方法()

  比如:ui->pushButton->setFont(myfont);

  程序员写代码,创建组件对象对象.成员方法()

  对象指针->成员方法()

信号与槽的特点:

第一个:一个类如果要使用信号以及槽函数,那么该类的定义汇总必须加上Q_OBJECT宏定义

第二个:同一个槽函数,可以被不同对象的信号关联

第三个:同一个信号,可以关联不同的槽函数,槽函数的调用顺序跟关联的先后顺序一致,先关联的先调用

第四个:信号带参数,槽函数可以带参数也可以不带参数

获取信号的发送者

作用:当多个组件对象共用一个槽函数的时候,程序员需要知道是哪个组件对象触发的信号,此时就要获取信号的发送者

QObject *sender() const

  返回值:返回一个指针,该指针指向信号的发送者

QT中转换函数(子类指向父类)

qobject_cast(QObject *object) //模版函数

QPushButton *p = qobject_cast<QPushButton *>(sender());

标签:函数,对象,ui,信号,组件,QT
From: https://blog.csdn.net/2302_78279100/article/details/141325047

相关文章

  • C语言程序设计-[24] 程序结构与函数定义
    1、C程序基本结构。2、函数的分类。3、函数的定义。无参函数的代码示例如下:注:调用的函数都是无返回值的,所以使用了void。有参函数的代码示例如下:注1:调用的函数是有参数的,main()函数的a,b,c值分别传给了average()函数的x,y,z;注2:调用的函数是有返回值的,且返......
  • 函数式编程
    函数式编程-Stream流1.概述1.1为什么学?能够看懂公司里的代码大数量下处理集合效率高代码可读性高消灭嵌套地狱下面是没有使用函数式编程的代码://查询未成年作家的评分在70以上的书籍由于洋流影响所以作家和书籍可能出现重复,需要进行去重List<Book>bookList=newA......
  • 【unix高级编程系列】信号
    引言以前对信号的理解,仅仅停留在main函数入口注册几个异常信号(SIGPIPE、SIGSEGV、SIGFPE)处理函数。当捕获到异常时,将进程的堆栈进行打印,方便排查、定位问题。这一类问题我认为是利用linux系统的异常信号机制,提高开发效率;后续随着工作经验的增长,linux的信号,还可以有其它用......
  • day03JS-函数
    1.什么是函数函数具有某种特定功能的代码块。函数其实本质也是一种数据,属于对象数据类型。2.为什么要有函数解决代码的冗余问题,形成代码复用。可以把整个代码项目,通过函数模块化。封装代码,让函数内部的代码对外部不可见。3.函数的组成函数的声明:function函数名(参数1,......
  • 字符函数与字符串函数详解
    ......
  • ctfshow-web入门-sql注入(web224-web230)文件类型注入、routines存储过程与函数状态、ha
    目录1、web2242、web2253、web2264、web2275、web2286、web2297、web2301、web224登录页面测了下没发现注入点存在robots.txt访问/pwdreset.php  ,是管理员密码重置的页面直接重置密码,这里以123456为例使用admin/123456登录 来到一个文件生成界......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
       农村高中是位于乡镇地区的普通全日制高级中学,从区域发展来看,随着城市化进程的加快,学校生源逐年下降,农村高中学生的数学素养特别是解决问题的模型素养日益下降。本课题研究中的农村高中是指位一所位于农村的普通四星级高级中学。数学建模能力从量和型的侧面去考查实际问......
  • 易优CMS内置 application/common.php 与 application/function.php 两文件的函数说明
    系统内置函数建议先熟悉系统内置application/common.php与application/function.php两文件的函数说明,如果有符合的函数,尽量在插件里调用;不符合的话就在插件的logic业务逻辑里实现。以当前开发的易优CMS版本为主,要查找函数是否存在,切记只可调用,不可更改全局函数,以免影响整个......
  • 信号与线性系统实验二:连续信号与系统的频域分析
    文章目录一、实验目的二、实验内容与原理三、实验器材(设备、元器件、软件工具、平台)四、实验步骤五、实验数据及结果分析1.正弦信号无混叠取样与恢复实验2.正弦信号有混叠取样与恢复实验3.非正弦周期信号有混叠取样与恢复实验4.恢复滤波器的的设计及其测试分析六、实......
  • torch.stack 堆叠函数帮助理解多维数组
    概论在PyTorch中,torch.stack函数用于在指定的维度上将一组张量堆叠起来。这个操作会在指定维度上创建一个新的维度,并将输入张量在该维度上进行堆叠。假设有两个形状相同的张量a和b,它们的形状都是(2,3,4),那么在不同的dim参数下使用torch.stack会产生不同的结果。以......