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

Qt_信号槽机制

文章目录

  • 一、 Qt中的信号槽机制
    • 1.在widget.h添加处理函数的声明
    • 2.添加处理函数的定义
    • 3.建立信号和槽的连接
    • 4.运行
  • 二、自定义信号
    • 1.自定义信号
    • 2.连接信号和槽函数
    • 3.发送信号


一、 Qt中的信号槽机制

本质就是给按钮的点击操作,关联上一个处理函数,当用户点击的时候,就会执行这个处理函数。

函数:static QMetaObject::Connection connect(const QObject *sender,const QMetaMethod &signal,const QObject *receiver, const QMetaMethod &method,Qt::ConnectionType type = Qt::AutoConnection);
作用:Qt中的connect是QObject这个类提供的的静态函数,这个函数的作用就是“连接信号”和“槽”
参数:sender:信号发出的对象,样例:ui->控件的objectNamesignal:发出的信号名称,以字符串形式给出。样例:&QPushButton::clickedreceiver:信号接收的对象,即槽函数所在的对象。method:接收信号时调用的槽函数名称,以字符串形式给出。

注:
如何访问组件对象,一般通过ui->objectName来访问。
在这里插入图片描述

ui->pushButton 通过这种方式就能访问到对应的组件
如果是用代码创建组件,可以直接用对象名

1.在widget.h添加处理函数的声明

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handleClick();//添加的
private:Ui::Widget *ui;
};
#endif // WIDGET_H

注:
在声明函数处,按下alt+回车,快速定义
在这里插入图片描述

2.添加处理函数的定义

void Widget::handleClick()
{//当按钮被点击之后,就把按钮中的文本进行切换ui->pushButton->setText("hello world");
}

3.建立信号和槽的连接

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,this,&Widget::handleClick);//建立连接
}

4.运行

按下前:
在这里插入图片描述
按下后:
在这里插入图片描述

二、自定义信号

信号是一类非常特殊的函数

  • 程序员只要写出函数声明,并且告诉Qt,这是一个"信号"即可,这个函数的定义,是Qt在编译过程中,自动生成的。(自动生成的过程,程序员无法干预)
  • 作为信号函数,这个函数的返回值,必须是void,有没有参数都可以,甚至也可以支持重载

1.自定义信号

//wi
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handleMySignal();
signals:void mySignal();//自定义的信号
private:Ui::Widget *ui;
};
#endif // WIDGET_H

2.连接信号和槽函数

connect(this,&Widget::mySignal,this,&Widget:: handleMySignal);

3.发送信号

发送信号中,使用的关键字:emit

emit mySignal();//运行这个代码就发送mySignal的信号 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • UnrealEngine学习(01):安装虚幻引擎
  • 教育与经济
  • Linux(CentOS8)系统安装mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
  • 制造业中的MES知识与ERP\PLM\WMS架构关系(附智能制造MES解决方案PPT下载)
  • 极限基础:变化率在manim中的实现
  • 【数据科学概述】数据科学的基本概念与发展历程】
  • 2408gui,学习gui的经验
  • 超详细Git基本命令使用(二)
  • UNI-APP 打包构建 APK
  • 微信小程序代码目录结构介绍
  • 数据结构概念
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • Java 应用的熔断机制:服务降级与恢复
  • Python酷库之旅-第三方库Pandas(104)
  • 打卡56天------图论(冗余连接)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES6简单总结(搭配简单的讲解和小案例)
  • Github访问慢解决办法
  • httpie使用详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java超时控制的实现
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Python语法速览与机器学习开发环境搭建
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 关于extract.autodesk.io的一些说明
  • 机器学习学习笔记一
  • 基于webpack 的 vue 多页架构
  • 说说动画卡顿的解决方案
  • 微服务核心架构梳理
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 带你开发类似Pokemon Go的AR游戏
  • #define用法
  • #微信小程序:微信小程序常见的配置传值
  • $.ajax()
  • (WSI分类)WSI分类文献小综述 2024
  • (阿里云万网)-域名注册购买实名流程
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (分布式缓存)Redis分片集群
  • (论文阅读11/100)Fast R-CNN
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (实战篇)如何缓存数据
  • (转)可以带来幸福的一本书
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .Net Redis的秒杀Dome和异步执行
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰