Qt中的线程与信号槽

小实践

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
// #pragma once
#include <QMainWindow>
#include"zthread.h"QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass ZThread;class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();void onEmitSignalUpdate(int num);private:Ui::MainWindow *ui;ZThread* m_pThtread;
};
#endif // MAINWINDOW_H

zthread.h

// #pragma once
#ifndef ZTHREAD_H
#define ZTHREAD_H
#include<QObject>
#include<QThread>
#include<QDebug>// QObject
class ZThread : public QThread
{Q_OBJECT
public:explicit ZThread(QObject *parent = nullptr);~ZThread();void stopthreadrunning();signals:void updateThreadsignal(int num);protected:void run();private:bool m_bRunning; //控制多线程运行。b是布尔类型int m_ncount; //n是number类型
};#endif // ZTHREAD_H

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
// #include "zthread.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);m_pThtread=new ZThread();m_pThtread->start();connect(m_pThtread,&ZThread::updateThreadsignal,this,&MainWindow::onEmitSignalUpdate);// connect(m_pThtread,SIGNAL(updateThreadsignal(int)),this,SLOT(onEmitsignalupdate(int))); //这样的写法也可以
}MainWindow::~MainWindow()
{if(m_pThtread!=nullptr){m_pThtread->stopthreadrunning();m_pThtread->quit();m_pThtread->wait();m_pThtread->deleteLater();}delete ui;
}void MainWindow::on_pushButton_clicked()
{m_pThtread->stopthreadrunning();
}void MainWindow::onEmitSignalUpdate(int num)
{qDebug()<<"==========Thread Signal Update"<<num<<Qt::endl;
}

zthread.cpp

#include "zthread.h"ZThread::ZThread(QObject *parent): QThread{parent},m_bRunning(true),m_ncount(0)
{}ZThread::~ZThread()
{}void ZThread::run() //The threaded code runs in this
{while(m_bRunning) //The code that all threads run on is written here{// qDebug()<<"T is running......"<<Qt::endl;++m_ncount;emit updateThreadsignal(m_ncount);msleep(1000); //Milliseconds}qDebug()<<"=====T is exit====="<<Qt::endl;
}void ZThread::stopthreadrunning()
{m_bRunning=false;
}

界面:

运行结果:

心得

我好像明白了点,我确实语法错了。之前关联信号与槽的时候,明明是不同的两个类,我却在connect前边加上了一个类域,这是其一;信号函数没有函数体定义,不能在.cpp文件中实现,但是我却实现了,还加了类域

没想到  重定义  三个字放到信号signals这里是这样的情况,我粗略地以为只是函数、变量对象等的“重定义、”

 connect(m_pThtread,&ZThread::updateThreadsignal,this,&MainWindow::onEmitSignalUpdate);  函数指针的写法也可以了

注意不要犯错:

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

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

相关文章

C++棋类小游戏2

今天给大家带来我花了1周时间自创的小游戏的升级版&#xff0c;博主还是一名小学生&#xff0c;希望大家提提意见。这是我写的最长的C代码&#xff0c;希望大家喜欢&#xff0c;不要抄袭&#xff0c;任何编译器都可以。 以前版本——C自创棋类小游戏-CSDN博客 C内容提示&…

苹果CMS挖片网升级版视频主题模版源码

自适应视频站正版高级挖片网收录模板&#xff0c;模板不错&#xff0c;是挖片网的升级版。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88799583 更多资源下载&#xff1a;关注我。

RCS系统之:地图编辑

一般每个供应商都有不同的需求&#xff0c;不同的需求都会是在不同的场景下产生的。而不同的场景都会需要构建不同的地图数据。 所有一个动态编辑的地图的能力都软件&#xff0c;是非常有必要的。基于这个想法&#xff0c;我们提供了一个可以实时&#xff0c;动态编辑地图的界面…

7000字详解Spring Boot项目集成RabbitMQ实战以及坑点分析

本文给大家介绍一下在 Spring Boot 项目中如何集成消息队列 RabbitMQ&#xff0c;包含对 RibbitMQ 的架构介绍、应用场景、坑点解析以及代码实战。 我将使用 waynboot-mall 项目作为代码讲解&#xff0c;项目地址&#xff1a;https://github.com/wayn111/waynboot-mall。本文大…

红日靶场1搭建渗透

环境搭建 下载好镜像文件并解压&#xff0c;启动vmware 这里我用自己的win7 sp1虚拟机作为攻击机&#xff0c;设置为双网卡NAT&#xff0c;vm2 其中用ipconfig查看攻击机ip地址 设置win7 x64为双网卡&#xff0c;vm1&#xff0c;vm2 设置win08单网卡vm1&#xff0c;win2k3为单…

MySQL查询缓存

MySQL查询缓存 MySQL在查询的时候首先会查询缓存&#xff0c;如果缓存命中的话就直接返回结果&#xff0c;不需要解析sql语句&#xff0c;也不会生成执行计划&#xff0c;更不会执行&#xff1b;如果没有命中缓存&#xff0c;则再进行SQL解析以及进行查询&#xff0c;并将结果返…

【轮式平衡机器人】——TMS320F28069片内外设之ADC

一、ADC概述 这一部分不是我们的重点&#xff0c;原理分类啥的这里简要说明&#xff01; 步骤&#xff1a;采样、保持、量化、编码 将采样电平&#xff08;模拟值&#xff09;转换为数字值的方法&#xff1a;直接比较型&#xff08;并行ADC、逐次逼近型ADC&#xff09;&…

【MongoDB】跨库跨表查询(python版)

MongoDB跨表跨库查询 1.数据准备&#xff1a;2.跨集合查询3.跨库查询应该怎么做&#xff1f; 讲一个简单的例子&#xff0c;python连接mongodb做跨表跨库查询的正确姿势 1.数据准备&#xff1a; use order_db; db.createCollection("orders"); db.orders.insertMan…

【C++入门到精通】C++的IO流(输入输出流) [ C++入门 ]

阅读导航 引言一、C语言的输入与输出二、流是什么三、CIO流1. C标准IO流&#xff08;1&#xff09;istream&#xff08;2&#xff09;ostream&#xff08;3&#xff09;iostream&#xff08;4&#xff09;cin 和 cout 2. C文件IO流&#xff08;1&#xff09;ifstream&#xff0…

【Android新版本兼容】onBackPressed()方法被弃用的解决方案

提示&#xff1a;此文章仅作为本人记录日常学习使用&#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、使用 AndroidX API 实现预测性返回手势1.1 添加依赖1.2 启用返回手势1.3 注册OnBackPressedCallback()方法来处理返回手势 一、使用 AndroidX API 实现预测…

Linux实验记录:使用vsftpd服务传输文件

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; 为了解决在多样复杂的设备之间解决传…

Android studio打包apk比较大

1.遇到的问题 在集成linphone打包时发现有118m&#xff0c;为什么如此之大额。用studio打开后发现都是不同的cpu架构。 2.解决办法 增加ndk配置&#xff0c;不需要配置那么多的cpu结构&#xff0c;根据自己需要调整。 defaultConfig { applicationId "com.matt.linp…

关于Ubuntu下docker-mysql:ERROR 2002报错

报错场景&#xff1a; mysql容器创建好后登录mysql时即使密码正确也是报出下方提示&#xff1a; 原因是在创建mysql容器在创建时本地目录缺失&#xff0c; 先去自建一个目录&#xff0c;例如&#xff1a; /opt/my_sql 正确完整目录如下&#xff1a; docker run --namemys…

【微服务】skywalking自定义链路追踪与日志采集

目录 一、前言 二、自定义链路追踪简介 2.1 自定义链路追踪应用场景 2.2 链路追踪几个关键概念 三、skywalking 自定义链路追踪实现 3.1 环境准备 3.2 集成过程 3.2.1 导入核心依赖 3.2.2 几个常用注解 3.2.3 方法集成 3.2.4 上报追踪信息 四、skywalking 自定义日志…

springboot153相亲网站

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

lava学习-多态-final-抽象类

一.多态 1.什么是多态&#xff1f; 现象&#xff1a;对象多态&#xff1a;比如说一个人 类&#xff0c;他可以是一个老师&#xff0c;也可以是一个同学 行为多态&#xff1a;多个对象同一类行为的不同表现形式&#xff0c;比如两个人&#xff0c;一个人跑得快&#xff0c;另一个…

Spring 事务原理总结三

今天这篇文章&#xff0c;我想梳理一下Spring事务用到的几个核心组件。这些核心组件是我们理解Spring事务原理的基础。通过它们我们可以体会学习一下Spring设计者设计Spring事务时的基本思路。这些组件是&#xff1a;TransactionInfo、TransactionStatus、TransactionManager、…

极速上手:使用Jmeter轻松实现N种参数化

参数化的方式&#xff1a; 一、使用用户自定义变量 一种方式&#xff1a;直接在测试计划中添加用户自定义变量 另外一种方式&#xff1a;配置元件——用户自定义变量 示例&#xff1a;用户自定义变量&#xff0c;登录手机号码 在接口请求的时候&#xff0c;进行引用 请求之后&…

利用OpenCV实现物流与生产线自动化的革命性突破

背景介绍&#xff1a; 在当今高度自动化的时代&#xff0c;物流和生产线上的每一个环节都关乎企业的核心竞争力。传统的生产方式往往依赖于人工检测和操作&#xff0c;这不仅效率低下&#xff0c;而且容易出错。为了解决这一问题&#xff0c;越来越多的企业开始寻求利用计算机视…

备战蓝桥杯---搜索(应用基础1)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们直接用深搜&#xff0c;我们可以先把空位用结构体存&#xff0c;然后打表存小方块&#xff0c;再用数组存行列。 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[12][12];…