Qt信号和槽

news2024/11/27 11:21:32

 一、定义

信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。

信号(Signal)就是在特定情况下被发射的事件,例如 PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的CurrentIndexChanged() 信号。

GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。

槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的 C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

信号与槽关联是用 QObject::connect() 函数实现的:

  connect(btn,&QPushButton::clicked,this,&QWidget::close);
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
//    第一个按钮
    QPushButton * btn=new QPushButton;
    //show以顶层方式弹出窗口坤健
//    btn->show();
    //让队形依赖于widget窗口
    btn->setParent(this);
    //显示文本
    btn->setText("关闭按钮");
//    创建第二个按钮,按照按钮的大小创建窗口
    QPushButton * btn2=new QPushButton("第二个按钮",this);

    btn2->move(100,100);
//    重置窗口大小
    resize(600,400);
//    设置固定窗口大小
    setFixedSize(600,400);
//    设置窗口标题
    setWindowTitle("第一个窗口");
     //需求,点击关闭按钮,关闭窗口
    //参数1:信号发送者 参数2:发送的信号 参数3:信号接受者 参数4:处理的槽函数
    connect(btn,&QPushButton::clicked,this,&QWidget::close);
}

二、自定义信号和槽

//Teacher类 老师类
//Student类 学生类
//下课后,老师会触发一个信号,饿了,学生响应信号,请客吃饭

 依次创建teacher和student类

 

 

  1、自定义信号

teacher.h


#ifndef TEACHER_H
#define TEACHER_H


#include <QObject>


class Teacher : public QObject
{
    Q_OBJECT
public:
    explicit Teacher(QObject *parent = nullptr);

signals:
    //自定义信号,写在signals下
    //返回值是void,只需申明,
    //可以有参数,可以重载
    void hungry();
};

#endif // TEACHER_H

teacher.cpp


#include "teacher.h"

Teacher::Teacher(QObject *parent)
    : QObject{parent}
{

}

2、自定义槽

student.h


#ifndef STUDENT_H
#define STUDENT_H


#include <QObject>


class Student : public QObject
{
    Q_OBJECT
public:
    explicit Student(QObject *parent = nullptr);
    //早期Qt版本,必须要写到public slots,高级本本可以写到public或者全局下
    //返回值void,需要申明,也需要实现
    //可以有参数,可以发生重载
    void treat();

signals:

};

#endif // STUDENT_H

student.cpp


#include "student.h"
#include<QDebug>
Student::Student(QObject *parent)
    : QObject{parent}
{

}
void Student::treat(){
    qDebug()<<"请老师吃饭";
}

3、关联信号和槽并发送信息

widget.h


#include "widget.h"
#include "ui_widget.h"

//Teacher类 老师类
//Student类 学生类
//下课后,老师会触发一个信号,饿了,学生响应信号,请客吃饭

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建一个老师对象
    this->th=new Teacher(this);
    //创建一个学生对象
    this->st=new Student(this);
    //老师饿了,学生请客的连接
    connect(th,&Teacher::hungry,st,&Student::treat);
    //调用下课函数,触发信号
    classIsOver();
}
void Widget::classIsOver(){
    //下课函数,调用后,触发老师饿了的信号
    emit th->hungry();
}
Widget::~Widget()
{
    delete ui;
}


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

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

相关文章

基于SpringBoot+vue的毕业生信息招聘平台设计和实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

淘宝618每日一猜答案6月12日 源氏木语获得多少个奖项?

淘宝6月12日每日一猜答案是什么&#xff1f;&#xff0c;接下来也会给大家来介绍一下6月12日淘宝大赢家每日一猜的答案。 淘宝每日一猜6月12日答案分享 活动问题&#xff1a;源氏木语获得多少个奖项&#xff1f; 活动答案&#xff1a;【15】 注意是阿拉伯数字&#xff01; …

20230612 set1打卡

哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码

目录 1、前言2、FT601芯片解读和时序分析FT601功能和硬件电路FT601读时序解读FT601写时序解读 3、我这儿的 FT601 USB3.0通信方案4、vivado工程1--彩条视频采集传输详细设计框图及其原理vivado工程解读 5、vivado工程2--OV5640视频采集传输详细设计框图及其原理vivado工程解读 …

【几分醉意赠书活动 - 04期】 | 《C++、Linux、算法等系列众书》

个人主页&#xff1a; 几分醉意的CSDN博客主页_传送门 个人主页&#xff1a; 陈老板的CSDN博客主页_传送门 赠书活动 | 第四期 本期好书推荐&#xff1a;《C、Linux、算法等系列众书》 粉丝福利&#xff1a;书籍赠送&#xff1a;共计送出30本 参与方式&#xff1a;关注公众号&a…

【MySQL 数据查询】: 基本、分组、排序、聚合、分页、条件查询详解

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL数据查询的讲解&#xff08;基本、分组、排序、聚合、分页、条件查询&#xff09; 目录 前言一、基本查询二、条件查询三、聚合函数(统计函数)四、分组查询五、排序查询五、分页查询六、总结 一、基本查询 MySQ…

全网最简单的软渲染器

引言 本文实现了一个包含矩阵变化、光栅化、面剔除、深度测试等功能的软渲染器。所谓软渲染器就是使用 CPU 渲染 3D 模型的程序。因此请记住我们的最终目的&#xff1a;将3D模型显示在屏幕上 。本文分为两个部分&#xff1a;预备知识、渲染器核心实现。预备知识概述了简化的渲…

可以在手机上使用的提醒事项软件有哪些

随着科技的进步&#xff0c;越来越多的人选择使用各种手机软件来提高自己的效率&#xff0c;高效率的手机软件已经成为人们生活和工作中不可或缺的一部分。其中&#xff0c;提醒事项软件是一种非常实用的工具&#xff0c;可以督促用户按时完成任务&#xff0c;有效防止遗忘。 …

chatgpt赋能python:如何利用Python在网上赚钱:一份SEO指南

如何利用Python在网上赚钱&#xff1a;一份SEO指南 随着互联网的快速发展和Python成为一种越来越受欢迎的编程语言&#xff0c;越来越多的人开始利用Python在网上赚取额外的收入。本篇文章将介绍一些Python工具和技术&#xff0c;以及SEO最佳实践&#xff0c;帮助你利用Python…

Spring Boot 回顾

Spring Boot 的发展是很快的&#xff0c;也使用了很多年。但是在工作中&#xff0c;还是发现了很多公司还没有怎么使用 Spring Boot&#xff0c;依旧是在使用 Spring MVC。于是决定复习总结一下。框架的进步和飞跃很重要&#xff0c;但是也不能一味追求新鲜事物&#xff0c;历史…

Yolo算法的演进—YoloCS有效降低特征图空间复杂度(附论文下载)

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;计算机视觉研究院 学习群&#xff5c;扫码在主页获取加入方式 论文地址&#xff1a;YOLOCS: Object Detection based on Dense Channel Compression for Feature Spatial Solidification (arxiv…

【6.12 代随_55day】判断子序列、不同的子序列

判断子序列、不同的子序列 判断子序列动态规划方法图解步骤代码 不同的子序列1.方法图解步骤代码 判断子序列 力扣连接&#xff1a;392. 判断子序列&#xff08;简单&#xff09; 动态规划方法 &#xff08;这道题也可以用双指针的思路来实现&#xff0c;时间复杂度也是O(n)…

Linux变卡cpu占用高,已装curl、wget但提示命令找不到(挖矿病毒)

现象 服务器变卡&#xff0c;top cpu占用非常高&#xff0c;但是进程占用只有1% 下载安装htop查看 看样子中了挖矿病毒 解决方式 修改/etc/hosts 把dev.fugglesoft.me 指向127.0.0.1 F9 -> enter杀掉进程 又多出来一个执行sh的&#xff0c;修改病毒sh&#xff0c;vi进去随便…

Portraiture5.0滤镜插件中文升级版本下载及功能介绍

专注人像修图&#xff0c;打造完美摄影作品&#xff0c;Portrait5.0是款最新版的人脸图像后期处理软件。它可以帮助用户快速编辑修图&#xff0c;提供全方面的人物美白效果&#xff0c;让用户可以更轻松地修图&#xff0c;操作简单&#xff0c;方便快捷&#xff0c;非常不错。新…

Cilium 如何处理 L7 流量

还记得在 使用 Cilium 增强 Kubernetes 网络安全 示例中&#xff0c;我们通过设置网络策略限制钛战机 tiefighter 访问死星 deathstar 的 /v1/exhaust-port 端点&#xff0c;但放行着陆请求 /v1/request-landing。在提起 Cilium 时&#xff0c;都说其是使用 eBPF 技术推动的用于…

心法利器[85] | 算法技术和职业规划

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会&#xff0c;与大家一起成长。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2022年新一版的文章合集已经发布&#xff0c;累计已经60w字了&#xff0c;获取方式看这里&…

花3万买的大学申请文书,竟和ChatGPT写的一样?

正值高考毕业季&#xff0c;留学出国又成热门话题。眼下&#xff0c;选学校、写申请书是不少学生头等大事。在AI如火如荼的今年&#xff0c;这个老行当却有了新变化。 当学生纷纷用AI写申请书&#xff0c;留学机构开始缩减业务&#xff0c;中介用AI写文书“糊弄”学生&#xf…

哈夫曼树和哈夫曼编码

一.哈夫曼树 1.哈夫曼树 哈夫曼树是一种用于编码的树形结构。它是通过将频率最低的字符反复组合形成的二叉树&#xff0c;使得出现频率高的字符具有较短的二进制编码&#xff0c;而出现频率低的字符具有较长的编码。 在哈夫曼树中&#xff0c;每个叶子节点都代表一个字符&am…

chatgpt赋能python:Python图形填充颜色教程

Python图形填充颜色教程 Python是一种简单易学、高效的编程语言&#xff0c;广泛应用于数据分析、机器学习、Web开发等领域。其中&#xff0c;图形处理是Python编程领域的一个重要方面。在很多情况下&#xff0c;我们需要填充图形颜色来增加图形的美观程度和可读性。本文将介绍…

使用OpenCV和MediaPipe实现姿态识别!

大家好&#xff0c;我是小F&#xff5e; MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。 它是一个基于图的数据处理管线&#xff0c;用于构建使用了多种形式的数据源&#xff0c;如视频、音频、传感器数据以及任何时间序列数据。 MediaPipe通过将各个感…