qt 自定义信号和槽举例

在Qt中,自定义信号和槽是对象间通信的一种强大机制。以下是一个简单的例子,展示了如何定义和使用自定义信号和槽。

首先,我们定义一个简单的Worker类,它有一个自定义信号workCompleted,当某个任务完成时,这个信号将被触发。

Worker.h

#ifndef WORKER_H  
#define WORKER_H  #include <QObject>  class Worker : public QObject {  Q_OBJECT  public:  Worker(QObject *parent = nullptr);  public slots:  void doWork();  signals:  void workCompleted(const QString &result);  
};  #endif // WORKER_H

Worker.cpp

#include "Worker.h"  
#include <QThread>  
#include <QDebug>  Worker::Worker(QObject *parent) : QObject(parent) {}  void Worker::doWork() {  // 模拟耗时工作  QThread::sleep(2); // 假设工作耗时2秒  emit workCompleted("工作完成");  
}

接下来,我们创建一个MainWindow类,它将使用Worker类,并连接自定义信号workCompleted到一个槽函数,以便在工作完成时更新UI。

MainWindow.h

#ifndef MAINWINDOW_H  
#define MAINWINDOW_H  #include <QMainWindow>  
#include "Worker.h"  namespace Ui {  
class MainWindow;  
}  class MainWindow : public QMainWindow {  Q_OBJECT  public:  explicit MainWindow(QWidget *parent = nullptr);  ~MainWindow();  private slots:  void onWorkCompleted(const QString &result);  void onStartWork();  private:  Ui::MainWindow *ui;  Worker *worker;  
};  #endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"  
#include "ui_MainWindow.h"  
#include <QMessageBox>  MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), worker(new Worker(this)) {  ui->setupUi(this);  // 连接信号和槽  connect(worker, &Worker::workCompleted, this, &MainWindow::onWorkCompleted);  connect(ui->startButton, &QPushButton::clicked, this, &MainWindow::onStartWork);  
}  MainWindow::~MainWindow() {  delete ui;  
}  void MainWindow::onWorkCompleted(const QString &result) {  QMessageBox::information(this, "工作完成", result);  
}  void MainWindow::onStartWork() {  worker->doWork();  
}

在这个例子中,Worker类有一个doWork槽函数,它模拟了一个耗时任务,并在任务完成后发射workCompleted信号。MainWindow类创建了Worker的实例,并将workCompleted信号连接到一个槽函数onWorkCompleted,该函数显示一个消息框来通知用户工作已完成。

当用户点击MainWindow中的开始按钮时,会触发onStartWork槽函数,进而调用worker->doWork()来开始工作。工作完成后,workCompleted信号被发射,从而触发onWorkCompleted槽函数并更新UI。

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

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

相关文章

人工智能及深度学习在病理组学中的应用概述|系列推文·24-07-11

小罗碎碎念 从本期推文开始&#xff0c;小罗将开始进行一项长期的工作——从头开始梳理人工智能在病理组学中的应用。 我会先从机器学习的进展开始讲&#xff0c;随后过渡到深度学习&#xff0c;再进一步阐述数据的处理分析方法&#xff0c;最后介绍人工智能在精准医疗以及病…

不用sleep 来实现延时,用handler 实现延时

如果您希望继续使用Handler来实现延时而不使用sleep&#xff0c;并且想保持代码结构清晰&#xff0c;可以采用链式postDelayed调用来替代之前的多层嵌套。同时&#xff0c;我将展示如何通过创建一个方法来组织这些延时任务&#xff0c;使得代码更加模块化和易于管理。 首先&…

django超市管理系统-计算毕业设计源码50628

摘要 随着零售业的快速发展和数字化趋势的加强&#xff0c;超市作为零售业的重要组成部分&#xff0c;面临着日益增长的竞争压力。为了提高超市的运营效率、降低管理成本并提供更好的客户服务&#xff0c;超市管理系统的引入变得至关重要。基于Python的超市管理系统旨在利用先进…

【MyBatis】——入门基础知识必会内容

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

Unity3D 太空大战射击游戏

一、前言 本案例是初级案例&#xff0c;意在帮助想使用unity的初级开发者能较快的入门&#xff0c;体验unity开发的方便性和简易性能。 本次我们将使用团结引擎进行开发&#xff0c;帮助想体验团结引擎的入门开发者进行较快的环境熟悉。 本游戏案例以太空作战为背景&#xff0c…

kubernetes集群部署:关于CRI(一)

上周接到了一项紧急预研任务&#xff1a;kubernetes各项属性采集。目前我手里已经存在二进制部署的一套kubernetes&#xff08;v1.23版本CRI&#xff1a;dockershim&#xff09;集群&#xff1b;为了适配的广泛性&#xff0c;决定使用kuberadm工具部署最新&#xff08;v1.30版本…

16集 用ESP-DL(ESP32)编译Tensorflow lite语音识别工程-《MCU嵌入式AI开发笔记》

16集 用ESP-DL&#xff08;ESP32&#xff09;编译Tensorflow lite语音识别工程-《MCU嵌入式AI开发笔记》 参考文档&#xff1a; ESP-DL 用户指南&#xff1a; https://docs.espressif.com/projects/esp-dl/zh_CN/latest/esp32/index.html 这个ESP-DL 是由乐鑫官方针对乐鑫系列…

SwiftUI @FetchRequest 中 CoreData 托管对象不能正确被刷新的解决

问题现象 在 CoreData 背后加持的 SwiftUI 应用中,我们在视图(View)中往往会采用 @FetchRequest 来查询、排序和过滤我们心仪的托管对象。 不过在上面的示意图中我们发现:虽然 Challenge(挑战)托管对象状态已经变为“失败”,但仍然显示在了最顶部的“正在进行”挑战的 …

概率统计(二)

二维离散型 联合分布律 样本总数为16是因为&#xff0c;两封信分别可以放在4个信箱 边缘分布律 条件分布律 独立性 选填才能用秒杀 联合概率乘积不等于边缘概率的乘积则不独立 二维连续型 区间用一重积分面积用二重积分 离散型随机变量 常见6个分布的期望和方差 离散型随机变…

记录一次mysql死锁问题的分析排查

记录一次死锁问题的分析排查 现象 底层往kafka推送设备上线数据应用层拉取设备上线消息,应用层有多个消费者并发执行将设备上线数据同步数据库表pa_terminal_channel日志报&#xff1a;&#xff08;Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: …

Linux配置仓库,安装软件

在Linux中安装软件&#xff0c;必须得配置仓库&#xff0c;挂载&#xff0c;才能安装成功 1.选择使用的虚拟机&#xff0c;右键点击“设置” 2.点击“CD/DVD”&#xff0c;勾选“设备状态”中的“已连接”和启动时链接&#xff0c;选择ISO映像文件 3..开启虚拟机 4.配置仓库…

spark中的floor函数

在Spark中&#xff0c;floor函数是一种数学函数&#xff0c;用于返回不大于给定数值的最大整数。具体作用如下&#xff1a; 1. 数值操作&#xff1a; floor函数会将每个元素向下取整到最接近的整数。例如&#xff0c;对于浮点数或双精度数值&#xff0c;它会返回不大于该数值的…

Lumos学习王佩丰Excel第四讲:排序与选择

一、排序 1、简单排序&#xff1a;不要选中一列排序&#xff0c;不然只是局部排序&#xff0c;其他数据都会发生错乱。 2、多条件排序 3、2003版本中超过3个排序条件时如何处理&#xff1a;从最后一个条件到第一个条件倒着按照要求依次排序。 4、按颜色排序 5、自定义排序次序…

妙笔生词智能写歌词软件:开启创作新篇还是形成依赖?

在音乐创作的世界里&#xff0c;科技的发展带来了诸多变革&#xff0c;妙笔生词智能写歌词软件的出现便是其中之一。它的出现引发了热烈的讨论&#xff0c;究竟是为音乐创作开启了全新的篇章&#xff0c;还是让创作者陷入了固有的思维之中&#xff1f; 从积极的方面来看&#…

FPGA设计之跨时钟域(CDC)设计篇(1)----亚稳态到底是什么?

1、什么是亚稳态? 在数字电路中,如果数据传输时不满足触发器FF的建立时间要求Tsu和保持时间要求Th,就可能产生亚稳态(Metastability),此时触发器的输出端(Q端)在有效时钟沿之后比较长的一段时间都会处于不确定的状态(在0和1之间振荡),而不是等于数据输入端(D端)的…

mobx学习笔记

mobx介绍 mobx是一个功能强大&#xff0c;上手容易的状态管理工具。MobX背后的哲学很简单:任何源自应用状态的东西都应该自动地获得。利用getter和setter来收集组件的数据依赖关系&#xff0c;从而在数据发生变化的时候精确知道哪些组件需要重绘。 mobx和redux的区别 mobx更…

【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 独立成分分析&#xff08;ICA&#xff09;&#xff1a;解锁信号的隐秘面纱引言I…

免杀笔记 ---> APC注入

除了我们前面讲的DLL注入&#xff0c;还有一个APC注入的东西也是很重要的&#xff01;&#xff01; &#xff1a;&#xff1a;确实很重要&#xff0c;相应的&#xff0c;在跟新完今天的代码之后&#xff0c;我也会对应的进行Github上工具的更新&#xff01;&#xff01; 1.AP…

css实现3d照片墙

效果图 vue2写法&#xff1a; <template><div class"container"><div class"box"><div class"circle circle1"><img src"../../../assets/images/main/logo.png" alt"" /></div>&l…

实战教程:如何利用Optimizer优化你的Windows系统?

前言 你是否厌倦了系统臃肿、隐私泄露的烦恼&#xff1f;小江湖今天就要带你走进一个全新的世界&#xff0c;一个能够让你重获自由与安心的神奇之地——Optimizer&#xff0c;一款专为Windows用户打造的深度优化神器&#xff1b;有了它你仅需轻轻一点&#xff0c;再也不用为系…