QT 信号和槽 信号关联到信号示例 信号除了可以绑定槽以外,信号还可以绑定信号

        信号除了可以关联到槽函数,还可以关联到类型匹配的信号,实现信号的接力触发。上个示例中因为 clicked 信号没有参数,而 SendMsg 信号有参数,所以不方便直接关联。本小节示范一个信号到信号的关联,将按钮的 clicked 信号关联到一个参数匹配的 SendVoid 信号。

编辑好界面之后保存,回到代码编辑模式,编辑 widget.h ,添加我们自定义的信号:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();signals:    //只添加一个信号,不需要按钮对应的槽函数void SendVoid();private:Ui::Widget *ui;
};#endif // WIDGET_H

 新添加的 SendVoid 信号声明,没有参数,所以能和按钮的 clicked 信号匹配,实现信号到信号的关联。
然后我们编辑 widget.cpp ,添加关联函数调用:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);//关联按钮信号到自定义的信号connect(ui->pushButton, SIGNAL(clicked()), this, SIGNAL(SendVoid()));
}Widget::~Widget()
{delete ui;
}

仅在构造函数里加了一句 connect 调用,注意 connect 函数第四个参数是 SIGNAL(SendVoid()),这就是关联到信号的用法。以前都是关联到槽函数,这里直接关联到自定义的信号,而不需要槽函数中转。
关联之后,一旦按钮的 clicked 信号触发,主窗体的信号 SendVoid() 紧跟着自动触发,实现信号触发的接力过程。

自定义信号的触发过程编完之后,下面为项目添加新的 ShowVoid 类,也是从 QObject 派生,和上面小节添加 C++ 类是类似的:

 

然后我们声明自定义的槽函数,用于接收 SendVoid() 信号,打开 showvoid.h,编辑如下: 

#ifndef SHOWVOID_H
#define SHOWVOID_H#include <QObject>class ShowVoid : public QObject
{Q_OBJECT
public:explicit ShowVoid(QObject *parent = 0);~ShowVoid();signals:public slots://接收 SendVoid() 信号的槽函数void RecvVoid();
};#endif // SHOWVOID_H

 头文件增加了与 SendVoid() 信号匹配的槽函数 RecvVoid() 声明。然后我们编辑 showvoid.cpp,添加槽函数实体代码:

#include "showvoid.h"
#include <QMessageBox>ShowVoid::ShowVoid(QObject *parent) : QObject(parent)
{}ShowVoid::~ShowVoid()
{}
//槽函数,弹窗
void ShowVoid::RecvVoid()
{QMessageBox::information(NULL, tr("Show"), tr("Just void."));
}

 有了 ShowVoid 类声明是不够的,接收信号需要一个对象实体,然后才能关联,所以同样地,编辑 main.cpp 文件,添加代码如下:

#include "widget.h"
#include <QApplication>
#include "showvoid.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;   //①源头对象,内部发送信号 SendVoid()ShowVoid s; //②接收对象,有对应槽函数 RecvVoid()//③关联源头的信号和接收端的槽函数QObject::connect(&w, SIGNAL(SendVoid()), &s, SLOT(RecvVoid()));//显示主界面w.show();return a.exec();
}

 这一小节大部分代码都和上一小节类似,所以不做过多重复描述了。程序运行效果如下图:

本小节示例的执行流程如下图所示:
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【优化过往代码】关于vue自定义事件的运用

【优化过往代码】关于vue自定义事件的运用 需求说明过往代码优化思路优化后代码&#xff08;Vue2&#xff09;遇到问题记录 Vue2官方自定义指令说明文档 Vue3官方自定义指令说明文档 需求说明 进入某些页面需要加载一些外部资源&#xff0c;并在资源加载完后进行一些处理&…

51单片机数码管显示的计数器,按键按下暂定,再次按下继续。(按键功能使用中断实现)

1、功能描述 数码管显示的计数器&#xff0c;按键按下暂定&#xff0c;再次按下继续。&#xff08;按键功能使用中断实现&#xff09; 2、实验原理 按键与中断&#xff1a;使用单片机的外部中断功能来检测按键动作&#xff0c;实现非阻塞的按键检测。 中断服务程序&…

十四、OpenAI之助手API(Asistants API)

助手API允许你在自己的应用系统中构建一个AI助手。助手有指令&#xff0c;能利用模型、工具和文件响应用户的查询。助手API目前支持3种类型的工具&#xff1a;代码交互&#xff0c;文件搜索和函数调用。 你可以使用助手后台探索助手的能力&#xff0c;或通过这个指南的大纲一步…

【栈】2751. 机器人碰撞

本文涉及知识点 栈 LeetCode2751. 机器人碰撞 现有 n 个机器人&#xff0c;编号从 1 开始&#xff0c;每个机器人包含在路线上的位置、健康度和移动方向。 给你下标从 0 开始的两个整数数组 positions、healths 和一个字符串 directions&#xff08;directions[i] 为 ‘L’ …

MySQL-数据处理函数

026-distinct去重 select job from emp;加个 distinct 就行了 select distinct job from emp;注意&#xff1a;这个去重只是将显示的结果去重&#xff0c;原表数据不会被更改。 select 永远不会改变原数据 select distinct deptno, job from emp order by deptno asc;027-数…

步态控制之足旋转点(Foot Rotation Indicator, FRI)

足旋转点(Foot Rotation Indicator, FRI) 足旋转点是人形机器人步态规划中的一个关键概念,用于描述步态过程中机器人脚部的旋转和稳定性。FRI 可以帮助确定机器人在行走时是否稳定,以及如何调整步态以保持稳定。下面详细介绍FRI的原理,并举例说明其应用。 足旋转点(FRI…

R语言统计分析——图形的简单示例

参考资料&#xff1a;R语言实战【第2版】 1、示例一 # 绑定数据框mtcars attach(mtcars)# 打开一个图形窗口并生成一个散点图plot(wt,mpg)# 添加一条最优拟合曲线abline(lm(mpg~wt))# 添加标题title("Regression of MPG on weight") # 解除数据框绑定 detach(mtcar…

ES8.13 _bulk报错Malformed content, found extra data after parsing: START_OBJECT解决

在使用elaticsearch8.13.0使用批量创建索引时&#xff0c;根据谷粒中说的es7.9方法去批量操作请求&#xff1a; http://127.0.0.1:9200/shop/_doc/_bulk 注意1&#xff1a;设置header为Content-Type:application/x-ndjson,否则请求报错&#xff1a; {"error": &qu…

量化视频2---miniqmt的使用配置

量化视频2---miniqmt的使用配置 量化视频2---miniqmt的使用配置 (qq.com)

机器学习笔记:focal loss

1 介绍 Focal Loss 是一种在类别不平衡的情况下改善模型性能的损失函数最初在 2017 年的论文《Focal Loss for Dense Object Detection》中提出这种损失函数主要用于解决在有挑战性的对象检测任务中&#xff0c;易分类的负样本占据主导地位的问题&#xff0c;从而导致模型难以…

什么是async/await?

async/await 是 JavaScript 中处理异步操作的一种新方式&#xff0c;它使得异步代码能够以同步的方式书写&#xff0c;从而提高了代码的可读性和可维护性。 async async 是一个函数修饰符&#xff0c;用于声明一个函数是异步的。一个 async 函数总是返回一个 Promise 对象。如…

6.10 c语言

7.1 if-else语句 简化形式 if(表达式)语句块 阶梯形式 if(表达式1)语句块1 else if(表达式2&#xff09;语句块2 嵌套形式 if() if() 语句1 else 语句2 else if() 语句3 else 语句4 表达式一般情况下为逻辑表达式或关系表达式 #include <stdio.h>//从小到大排序,输出顺…

【recast-navigation-js】使用three.js辅助绘制Agent寻路路径

目录 说在前面setAgentTarget绘制寻路路径结果问题其他 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5上一篇&#xff1a;【recast-navigation-js】使用three.js辅…

linux:centos7升级libstdc++版本到3.4.26

下载&#xff0c;解压 wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip unzip libstdc.so_.6.0.26.zip 复制到【/usr/lib64】&#xff1a; cp libstdc.so.6.0.26 /usr/lib64创建软链接 cd /usr/lib64 sln libstdc.so.6.0.26 libstdc.so.6查看一…

Python | Leetcode Python题解之第144题二叉树的前序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:res list()if not root:return resp1 rootwhile p1:p2 p1.leftif p2:while p2.right and p2.right ! p1:p2 p2.rightif not p2.right:res.append(p1.val)…

机器学习笔记 - LoRA:大型语言模型的低秩适应

一、简述 1、模型微调 随着大型语言模型 (LLM) 的规模增加到数千亿,对这些模型进行微调成为一项挑战。传统上,要微调模型,我们需要更新所有模型参数。这也称为完全微调 (FFT) 。下图详细概述了此方法的工作原理。 完全微调FFT 的计算成本和资源需求很大,因为更新每…

数据中台、数据仓库、数据湖的区别和关联

区别 概念定义 数据中台&#xff1a;是企业级的逻辑概念&#xff0c;体现企业数据向业务价值转化的能力。它距离业务更近&#xff0c;能够更快速地响应业务和应用开发需求&#xff0c;为业务提供速度更快的服务。数据仓库&#xff1a;是为企业所有级别的决策制定过程&#xff…

初识 CAS理论

1、CAS 通过硬件保证比较-更新的原子性&#xff0c;不涉及用户态内核态的切换。 2、CAS 是 CPU 的原子指令(cmpxchg指令)&#xff0c;不会造成数据的不一致问题。Unsafe提供的 CAS 方法底层实现的是 CPU 指令cmpxchg。 3、执行cmpxchg指令&#xff0c;会判断 当前系统是否为多…

Vmess协议是什么意思? VLESS与VMess有什么区别?

VMess 是一个基于 TCP 的加密传输协议&#xff0c;所有数据使用 TCP 传输&#xff0c;是由 V2Ray 原创并使用于 V2Ray 的加密传输协议&#xff0c;它分为入站和出站两部分&#xff0c;其作用是帮助客户端跟服务器之间建立通信。在 V2Ray 上客户端与服务器的通信主要是通过 VMes…

深度学习的点云分类

深度学习的点云分类 点云分类是指将三维点云数据中的每个点或整个点云进行分类的任务。点云数据由大量三维点构成&#xff0c;每个点包含空间坐标&#xff08;x, y, z&#xff09;&#xff0c;有时还包含其他信息如颜色和法向量。点云分类在自动驾驶、机器人导航、3D重建等领域…