QT/自定义槽和信号

创建两个类student和teacher,父类都为QObject

在teacher中自定义Signal,hungry

//自定义信号,写道signals下
signals://返回值void//只需要声明//可以有参数,可以重载void hungry();void hungry(QString FoodName);

在student中自定义Slot,treat

//自定义槽函数,写到public slots Qt5.0版本以上可以写成全局函数或者public作用域下或者lambda表达式
public slots://返回值void//需要声明和实现//可以有参数,可以重载void treat();void treat(QString FoodName);

当teacher对象发出hungry信号,调用treat槽函数

connect(tc, &teacher::hungry, st, &student::treat);

当遇到重载的槽函数时,需用函数指针指向对应的函数

    //连接信号槽//连接有参数信号和槽//当信号和槽发生重载的时候,函数指针可以指向函数地址,用函数指针明确对应的函数void(teacher::*teacherSignal)(QString) = &teacher::hungry;void(student::*studentSlot)(QString) = &student::treat;void(student::*studentSlotEmpty)() = &student::treat;connect(tc, teacherSignal, st, studentSlot);connect(btn1, &QPushButton::clicked, st, studentSlotEmpty);

Qstring转换为char类型的方法

//QString转char* 通过.toUtf8转为QByteArrary类型通过.data()转为char*
qDebug() << "请老师吃" << FoodName.toUtf8().data();

student.h

#ifndef STUDENT_H
#define STUDENT_H#include <QObject>
#include <QDebug>class student : public QObject
{Q_OBJECT
public:explicit student(QObject *parent = nullptr);signals://自定义槽函数,写到public slots Qt5.0版本以上可以写成全局函数或者public作用域下或者lambda表达式
public slots://返回值void//需要声明和实现//可以有参数,可以重载void treat();void treat(QString FoodName);void treat(QString FoodName, QString SecondFoodName);
};#endif // STUDENT_H

teacher.h

#ifndef TEACHER_H
#define TEACHER_H#include <QObject>
#include <QString>class teacher : public QObject
{Q_OBJECT
public:explicit teacher(QObject *parent = nullptr);//自定义信号,写道signals下
signals://返回值void//只需要声明//可以有参数,可以重载void hungry();void hungry(QString FoodName);
};#endif // TEACHER_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QTextEdit>
#include "mypushbutton.h"
#include "teacher.h"
#include "student.h"QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();teacher* tc;student* st;QPushButton* btn1;QPushButton* btn2;QPushButton* btn3;QPushButton* btn4;void display(QTextEdit *text1);void classIsOver();
private:Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//new时括号内加入this,会将对象放入对象树,会自动调用析构函数this->tc = new teacher(this);this->st = new student(this);this->btn1 = new QPushButton;this->btn2 = new QPushButton;this->btn3 = new QPushButton("close", this);this->btn4 = new QPushButton("吃两个菜", this);btn1->setParent(this);btn1->setText("下课");btn2->setParent(this);btn2->setText("display");btn2->move(0,200);btn3->move(0,300);btn4->move(0,250);//连接信号槽//连接有参数信号和槽//当信号和槽发生重载的时候,函数指针可以指向函数地址,用函数指针明确对应的函数void(teacher::*teacherSignal)(QString) = &teacher::hungry;void(student::*studentSlot)(QString) = &student::treat;connect(tc, teacherSignal, st, studentSlot);//信号可以连接信号void(teacher::*teacherSignalEmpty)() = &teacher::hungry;void(student::*studentSlotEmpty)() = &student::treat;connect(tc, teacherSignalEmpty, st, studentSlotEmpty);connect(btn1, &QPushButton::clicked, tc, teacherSignalEmpty);//信号可以断开连接//disconnect(btn1, &QPushButton::clicked, tc, teacherSignalEmpty);//一个信号可以绑定多个槽函数//多个信号可以绑定同一个槽函数connect(btn2, &QPushButton::clicked, tc, teacherSignalEmpty);//槽函数的参数和信号的参数类型必须一一对应//信号的参数个数可以多余槽函数的参数个数,反之不可以//链接槽函数 注:信号的参数要大于等于槽函数的参数,//点击事件无参,但是槽函数需要传递ui参数//故槽函数采用Qt5之后支持的lambda表达式进行传参,常用=传递值,而不是&,因为当槽和信号连接时,当前控件会进入锁的状态,而=传递是创造新的值覆盖,不会过多影响效率,加上mutable关键字,可以修改按值传递的拷贝//新建一个texteditQTextEdit *text1 = new QTextEdit(this);//设置大小为200*100并放置在(300,100)处text1->resize(200, 100);text1->move(300, 100);//重置窗体大小为600*400this->resize(600, 400);connect(btn2, &QPushButton::clicked, text1, [=](){display(text1);});//Qt4版本信号和槽信号写法(不推荐)//利用Qt4版本连接有参信号和槽//优势参数直观//劣势参数类型不做匹配检测//connect(tc, SIGNAL(hungry(QString), st, SLOT(treat(QString)));//点击按钮,关闭窗口connect(btn3, &QPushButton::clicked, this, [=](){this->close();});connect(btn4, &QPushButton::clicked, this, [=](){this->st->treat("宫保鸡丁", "鱼香肉丝");});classIsOver();
}void Widget::display(QTextEdit *text1)
{text1->setText("I Love you more than I can say!");text1->append("我爱你在心口难开");
}void Widget::classIsOver()
{//触发自定义信号,emit是Qt关键字,使用:在A中对B发出信号emit this->tc->hungry("宫保鸡丁");
}Widget::~Widget()
{delete ui;
}

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

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

相关文章

抖音数据抓取工具|视频内容提取软件

引言部分&#xff1a; 介绍针对抖音视频下载需求开发的强大工具突出解决用户获取抖音视频繁琐问题的初衷 工具功能介绍&#xff1a; 详细描述工具功能&#xff0c;包括关键词搜索、自动批量抓取、选择性批量下载等提及基于C#开发的优势以及支持通过分享链接进行单个视频抓取…

10:部署Dashboard|部署Prometheus|HPA集群

部署Dashboard&#xff5c;部署Prometheus&#xff5c;HPA集群 Dashboard部署Dashboard上传镜像到私有仓库安装服务发布服务创建管理用户查看登录的Token信息 Prometheus步骤一&#xff1a;导入所有后续需要的镜像到私有镜像仓库&#xff08;在master主机操作操作&#xff09;步…

【区块链】智能交易模式下的数据安全流通模型

【区块链】智能交易模式下的数据安全流通模型 写在最前面**区块链智能交易模式概述****数据安全流通的挑战****数据安全流通模型的核心要素****实现数据安全流通的区块链技术****区块链智能交易模式下数据安全流通模型的设计原则****数据安全流通模型的应用案例分析****面临的挑…

ONLYOFFICE8.0——赋能办公

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-xdAoM2pHRmDFP0tF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

c语言常用输入输出函数

目录 *概述*1. printf函数&#xff1a;用于向屏幕输出格式化的数据。2. scanf函数&#xff1a;用于从键盘读取输入并赋值给变量。3. getchar函数&#xff1a;用于从键盘读取单个字符。4. putchar函数&#xff1a;用于向屏幕输出单个字符。5. gets函数&#xff1a;用于从键盘读取…

IDEA 重装我都会默默的下载这些好用的插件

本文已经收录公众号&#xff1a;面汤放盐 IDEA 重装我都会默默的下载这些好用的插件 (qq.com) 这几年用得最多的插件&#xff0c;分享给大家。工欲善其事&#xff0c;必先利其器&#xff01;每一次电脑重装&#xff0c;更换工作&#xff0c;我都会默默地打开我的插件收藏单&a…

SpringBoot项目实现文件上传,MINIO+OSS阿里云

MINIO 安装以及部署 官网&#xff1a;MinIO | Code and downloads to create high performance object storage 下载后是一个minio.exe的文件&#xff0c;可以先创一个文件夹来存放数据以及文件 在文件的目录下cmd进入控制台 minio.exe server data 启动成功后控制台会打印账…

Raspbian命令行RTSP/RTP服务

Raspbian命令行RTSP/RTP服务 1. 源由2. Raspbian摄像头2.1 命令行启动RTP摄像头2.2 命令行启动RTSP摄像头 3. 示例3.1 测试RTP摄像头3.2 测试RTSP摄像头3.3 QGroundControl测试3.3.1 RTSP配置3.3.2 RTP配置 4. 总结5. 参考资料 1. 源由 鉴于实际测试发现RTP协议下&#xff0c;…

利用DevOps和ITSM的集成能促进IT技术

在当今这个快节奏和技术驱动的世界里&#xff0c;DevOps 和 IT 服务管理&#xff08;ITSM&#xff09;理念在培养心理健康和减少技术压力的工作环境中正在发挥重要作用。混合最佳实践&#xff0c;实现更好、更快、更安全的服务。 什么是DevOps&#xff1f; DevOps 专注于采用协…

多人协作记账账本小程序开源版开发

多人协作记账账本小程序开源版开发 支持多人协作的记账本小程序&#xff0c;可用于家庭&#xff0c;团队&#xff0c;组织以及个人的日常收支情况记录&#xff0c;支持周月年度统计 便捷记账 便捷的记账方式&#xff0c;支持多种记账类型&#xff0c;快捷切换账本等 多账本 支…

猫头虎分享已解决Bug || ValueError: Setting an array element with a sequence.

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

python 基础知识点(蓝桥杯python科目个人复习计划49)

今日复习内容&#xff1a;做复习题 例题1&#xff1a;希尔排序 题目描述&#xff1a; 希尔排序是直接插入排序算法的一种更高效的改进版本&#xff0c;但它是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出的改进方法之一&#xff1a; 1.插入排序在对几乎已经…

C++初阶:容器适配器priority_queue常用接口详解及模拟实现、仿函数介绍

介绍完了stack和queue的介绍以及模拟的相关内容后&#xff1a;C初阶&#xff1a;容器适配器介绍、stack和queue常用接口详解及模拟实现 接下来进行priority_queue的介绍以及模拟&#xff1a; 文章目录 1.priority_queue的介绍和使用1.1priority_queue的初步介绍1.2priority_que…

Spring 手动实现Spring底层机制

目录 一、前言 二、Spring底层整体架构 1.准备工作 : 2.架构分析 : &#xff08;重要&#xff09; 3.环境搭建 &#xff1a; 三、手动实现Spring容器结构 1.自定义注解 : 1.1 Component注解 1.2 Scope注解 2.自定义组件 : 3.自定义用于封装Bean信息的BeanDefinition类&a…

【MySQL系列 04】深入浅出索引

一、索引介绍 提到数据库索引&#xff0c;相信大家都不陌生&#xff0c;在日常工作中会经常接触到。比如某一个 SQL 查询比较慢&#xff0c;分析完原因之后&#xff0c;你可能就会说“给某个字段加个索引吧”之类的解决方案。 但到底什么是索引&#xff0c;索引又是如何工作的…

【多线程】volatile 关键字、wait 和 notify方法详解

volatile 、wait 和 notify &#x1f332;volatile关键字&#x1f6a9;保证内存可见性&#x1f6a9;volatile 不保证原⼦性 &#x1f333;wait 和 notify方法&#x1f6a9;wait()&#x1f6a9;notify()&#x1f6a9;notifyAll()方法 ⭕wait 和 sleep 的对比&#xff08; 面试题…

yolo导出的onnx怎么使用onnxruntime进行图片分割

1.上几篇文件写了&#xff0c;怎么自定义自己的yolo数据&#xff0c;怎么训练自己自定义的数据&#xff0c;怎么用onnxruntime调用yolo导出的onnx模型&#xff0c;这文章进一步写用onnxruntime调用yolo导出的onnx模型进行图片分割。 视频讲解地址:https://www.bilibili.com/vi…

Java学习——常用API Runtime

Java的Runtime类是用来与Java运行时环境进行交互的。它提供了执行系统命令、获取内存信息等功能。Runtime类是一个单例类&#xff0c;即在Java应用程序中只能获得一个Runtime实例&#xff0c;用于代表Java应用程序的运行时环境。 获取Runtime实例 由于Runtime类的构造函数是私…

【GTK+-编程指南*】

GTK-编程指南 ■ GTK 简介 (GIMP Toolkit)■ GTK和GTK■ GTK 常用的库■ GTK 环境搭建■ GTK 语法■ GTK ■ GTK 简介 (GIMP Toolkit) GIMP全称&#xff1a;GNU 图像处理程序(Gnu Image Manipulation Program) GTK 是一套源码以LGPL许可协议分发、跨平台的图形工具包。 GTK也是…

基础光学系列:(一)光学在机器视觉中的角色:原理、应用与学习途径

光学是一门研究光的产生、传播以及与物质相互作用的科学&#xff0c;对于机器视觉技术的发展至关重要。机器视觉利用计算机和相机系统模拟人类视觉&#xff0c;解释和理解图像&#xff0c;广泛应用于制造业、医疗、安全监控等领域。本文旨在探讨光的传播原理及其在机器视觉中的…