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

QT 自定义信号

自定义信号需要遵循的规则

  • 信号是类的成员函数,并且返回类型必须是 void 类型
  • 信号函数只需要声明, 不需要定义(没有函数体实现)
  • 参数可以随意指定, 信号也支持重载
  • 信号需要使用 signals 关键字进行声明, 使用方法类似于public等关键字
  • 在程序中发送自定义信号: 发送信号的本质就是调用信号函数

创建信号:

signals:void mysignals();

信号发送

emit mysignals();	//发送信号

创建槽函数

private slots:void addvalue();

信号绑定

完成连接connect的过程包括以下内容:

  • 信号的发送(信号发出者)
  • 信号发送的具体内容(发出的信号)
  • 信号的接受(信号接收者)
  • 信号的处理(信号槽函数)

信号槽的优点: 松散耦合
信号的发送方和接受方本身没有关联(发送端的信号不一定触发接收端处理,接收端也不一定要接收信号后才完成操作),只是通过连接connect将两端耦合在一起。

connect(this,SIGNAL(mysignals()),this,SLOT(addvalue()));

以检测一个变量值改变的信号为例子:

mainwindows.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();signals:void valueadd();private:Ui::MainWindow *ui;void add();int value=0;private slots:void addvalue();void on_pushButton_clicked();
};
#endif // MAINWINDOW_H

mainwindows.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(this,SIGNAL(valueadd()),this,SLOT(addvalue()));//add();
}MainWindow::~MainWindow()
{delete ui;
}//void MainWindow::add()
//{
//    value++;
//    emit valueadd();
//}void MainWindow::addvalue()
{qDebug()<<value;
}void MainWindow::on_pushButton_clicked()
{value++;emit valueadd();
}

实现的功能是点击按钮后value变量的值增加,然后发送valueadd信号,输出value的值

相关文章:

  • YoloV7改进策略:卷积改进|MogaNet——高效的多阶门控聚合网络
  • Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用!
  • GPT实战系列-LangChain如何构建基通义千问的多工具链
  • 数据库--SQL语言-1
  • 深入了解二叉搜索树:原理、实现与应用
  • C语言-写一个简单的Web服务器(一)
  • uniapp+node.js前后端做帖子模块:发布帖子评论(社区管理平台的小程序)
  • 链表中的经典问题——反转链表
  • C#拾遗补漏之goto跳转语句
  • Centos安装mysql8
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • 部署LVS+Keepalived高可用群集(抢占模式,非抢占模式,延迟模式)
  • MySQL利用逻辑备份恢复误删的数据库
  • vue 总结
  • redis使用笔记
  • [deviceone开发]-do_Webview的基本示例
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Angular 2 DI - IoC DI - 1
  • ERLANG 网工修炼笔记 ---- UDP
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java反射-动态类加载和重新加载
  • Linux Process Manage
  • Linux中的硬链接与软链接
  • Python_网络编程
  • React+TypeScript入门
  • vuex 学习笔记 01
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 初识 webpack
  • 从伪并行的 Python 多线程说起
  • 浮动相关
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊聊flink的BlobWriter
  • 聊聊redis的数据结构的应用
  • 使用Swoole加速Laravel(正式环境中)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 优秀架构师必须掌握的架构思维
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 国内开源镜像站点
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​ArcGIS Pro 如何批量删除字段
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #HarmonyOS:基础语法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (笔试题)分解质因式
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)fock函数详解
  • (转)LINQ之路