当前位置: 首页 > news >正文

【Qt】7.信号和槽_connect函数用法(1)

文章目录

  • 1. 信号
  • 2. 槽的本质
  • 3. 信号和槽的使用
    • 3.1 连接信号和槽


1. 信号

Linux 信号Signal:系统内部的通知机制,进程间通信的方式

  • 信号源:谁发的信号。
  • 信号的类型:哪种类别的信号。
  • 信号的处理方式:注册信号处理函数,在信号被触发的时候自动调用执行。

Qt中的信号和Linux中的信号,虽然不是一样的概念,但是确实有相似之处

Qt中,谈到信号,也是涉及到三个要素。

  1. 信号源:由哪个控件发出的信号。

  2. 信号的类型:用户进行不同的操作,就可能触发不同的信号。

    • 点击按钮,触发点击信号。

    • 在输入框中移动光标,触发移动光标的信号。

    • 勾选一个复选框

    • 选择一个下拉框都会触发出不同的信号。

  3. 信号的处理方式:槽(slot)=>函数

Qt中可以使用connect这样的函数,把一个信号和一个槽关联起来,后续只要信号触发了,Qt就会自动的执行槽函数。

一定是先把信号的处理方式准备好,再触发信号。

Qt中,一定是先关联号信号和槽,然后再触发这个信号,顺序不能颠倒,否则信号就不知道如何处理了(错过了)

bb37636e00deabb8588018c739614b2f

  1. 信号的本质:

信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时 Qt 对应的窗口类会发出某个信号,以此对用户的操作做出反应。因此,信号的本质就是事件。

  1. Qt 中信号是通过什么形式呈现给使用者的呢?

    • 我们对哪个窗口进行操作, 哪个窗口就可以捕捉到这些被触发的事件。

    • 对于使用者来说触发了一个事件我们就可以得到 Qt 框架给我们发出的某个特定信号。

    • 信号的呈现形式就是函数, 也就是说某个事件产生了, Qt 框架就会调用某个对应的信号函数, 通知使用者。

  2. Qt 中信号的发出者是某个实例化的类对象。


2. 槽的本质

槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的 C++ 函数是一样的,可以定义在类的任何位置( publicprotectedprivate ),可以具有任何参数,可以被重载,也可以被直接调用(但是不能有默认参数)。

槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

  1. 信号和槽机制底层是通过函数间的相互调用实现的。每个信号都可以用函数来表示,称为信号函数;每个槽也可以用函数表示,称为槽函数。例如: “按钮被按下” 这个信号可以用 clicked() 函数表示,“窗口关闭” 这个槽可以用 close() 函数表示,假如使用信号和槽机制

    实现:“点击按钮会关闭窗口” 的功能,其实就是 clicked() 函数调用 close() 函数的效果。

  2. 信号函数和槽函数通常位于某个类中,和普通的成员函数相比,它们的特别之处在于:

  • 信号函数用 signals 关键字修饰,槽函数用 public slots、protected slots 或者 private slots 修饰。signals 和 slotsQtC++ 的基础上扩展的关键字,专门用来指明信号函数和槽函数;
  • 信号函数只需要声明,不需要定义(实现),而槽函数需要定义(实现)。

Qt中提供的这些类,本身是存在一定的继承关系的。QObject就是其他Qt内置类的"祖宗”。

信号函数的定义是 Qt 自动在编译程序之前生成的。编写 Qt 应用程序的程序猿无需关注。

这种自动生成代码的机制称为 元编程 (Meta Programming) 。这种操作在很多场景中都能见到。


3. 信号和槽的使用

3.1 连接信号和槽

connect的具体用法:

bool connect(const QObject *sender, const char *signal_, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection);

参数说明:

  • sender:信号的发送者;
  • signal:发送的信号(信号函数);
  • receiver:信号的接收者;
  • method:接收信号的槽函数;
  • type: 用于指定关联方式,默认的关联方式为 Qt::AutoConnection,通常不需要手动设定。

例子:在窗口中设置一个按钮,当点击 “按钮” 时关闭 “窗口”

图标带锯齿的是槽函数,如click

图标类似于wifi信号的是信号函数,如clicked

bedb204ca1c8d885d963c1a60f200ede

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* button = new QPushButton(this);button->setText("关闭");button->move(200,200);//click是一个slot函数,作用就是在调用的时候相当于点击了一下按钮//clicked(过去分词形式,完事了,点完了),才是要触发的点击信号//connect要求,前俩参数是匹配的.button的类型如果是QPushButton*//此时,第二个参数的信号必须是QPushButton内置的信号(父类的信号),不能是一个其他的类,比如QLineEdit的信号~~//close是QWidget内置的槽函数.Widget继承自QWidget,也就继承了父亲的槽函数//close槽函数功能已经是人家内部实现好了,不需要咱们去关心。具体的作用就是关闭当前的窗口/控件。connect(button,&QPushButton::clicked,this,&Widget::close);
}Widget::~Widget()
{delete ui;
}

运行:

a93f983239fce12af7a415e298fce32d

点击后关闭

http://www.dtcms.com/a/486758.html

相关文章:

  • 【成功案例分享】手腕鼓包?不痛不痒?我的腱鞘囊肿15天自愈实战记录
  • gcc: 函数调用优化一例,在栈里找不到函数调用的影子;gdb
  • Navicat Premium 与金仓数据库融合实践:高效管理国产数据库新方案
  • 高光谱成像在种子品种、种子纯度、种子活力鉴别的研究进展
  • 怎样在网上建网站做电商生意网站抓取压力高
  • 陕西网站建设开发企业网站搜索优化外
  • 校园网站建设初探论文南山品牌网站建设企业
  • Apache Spark算法开发指导-特征转换TargetEncoder
  • spark热点key导致的数据倾斜复现和加盐处理
  • Chrominum的技术架构
  • 青岛网站域名备案查询佛山市企业网站建设哪家好
  • 目标检测:从定义到实战关键技术
  • 如何利用AOP实现业务层接口的执行效率
  • 废家电回收小程序:绿色生活与智慧服务的前端功能创新
  • Fast DDS简介
  • 做数据的网站有哪些内容乐陵seo公司
  • 大数据平台安全指南——大数据平台安全架构全景:从认证授权到数据治理的企业级实践指南——认证、授权、审计、加密四大支柱
  • 管理员网站上海有哪些做网站
  • C盘深度清理指南
  • Android 中 RecyclerView 与 ListView 的深度对比:从设计到实践
  • 中网互联网站建设装修网站免费设计
  • SSH安全操作:nftables避坑指南
  • 重庆网站建设咨询wordpress访问非常慢
  • 操作教程 | 在DataEase中嵌入SQLBot开源智能问数系统
  • 基于SpringBoot的健身管理系统(平台)
  • 硬件 - BQ40Z80电量计应用详解(4) - 充电算法GG配置 -ing
  • 有什么网站可以接单做兼职的简单电子商务网站开发
  • SYN VISION亮相欧洲区块链大会:重塑短剧RWA与AI娱乐生态
  • 威海高区有没有建设局的网站2023年新闻摘抄
  • WebSocket vs HTTP 对比