首页 > 其他分享 >QT增加线程函数步骤流程

QT增加线程函数步骤流程

时间:2024-03-21 19:34:02浏览次数:467  
标签:界面 QT 自定义 步骤 开启 线程 信号 cpp

在使用线程的时候,不仅要关注线程开启的时机,同时还要关注线程安全退出,这样才能保证程序的健壮性,如果线程开启的较多,且开启关闭比较频繁,建议使用线程池来处理。开启线程有三种方式:第一种C++的开线程方式;第二种自定义一个继承自QObject的类,把要处理的事情放在这个类中实现,然后再new一个QThread指定,把这个类通过moveToThread移动到指定的线程中进行处理;第三种也就是我们这里重点分析的一种,自定义一个类,继承自QThread,然后重写run函数,把要处理的事项放在run函数中。

1,新建一个C++类,并继承自QThread

2,输入线程类的名称,并勾选图中所示内容,点击下一步,点击完成即可

 3,在添加的线程类中,.h文件中添加run函数,用于重写

4,在线程类的cpp文件中,在run()中添加要处理的逻辑业务

5,子线程只能处理数据,不能直接在子线程操作界面(否则会崩溃),如果想要操作界面,需要将子线程的数据传递给界面主线程进行操作,这样就用到了我们信号和槽,子线程和主线程之间传递参数。子线程和主线程之间传递数据: 

(1)首先,在主界面的头文件中,添加线程对象:

#include"usbthread.h"和usbThread myusbThread;

(2) 在主界面的cpp文件中,添加信号和槽连接(这里用到自定义信号),在子线程的头文件中定义你要传递的数据,这里使用的自定义结构体信号stru_usb_data,参数是结构体形式。

signals:void send_usbFlagSignal(stru_usb_data usb_data);

(3) 在界面主线程中的构造函数中开启线程,也可以根据自己的需要开启线程(比如,点击按钮时开启,或者接收到信号触发时开启,这个根据用户自己的需求来定);并且 在子线程的cpp文件中通过emit函数发送该信号

(4)  在子线程的cpp文件中通过emit函数发送该信号

(5) 在主界面cpp文件中连接信号和槽,用于接收子线程传递过来的数据,这里的信号是自定义的信号,参数是非基本类型,所以需要对信号进行注册。于是就实现了一个界面主线程,一个数据处理线程,子线程提供数据,通过信号和槽传递给界面主线程,界面主线程对接收到的数据进行处理。

6,线程运行完毕,需要安全退出(线程异常退出有可能导致崩溃),这里安全退出有两种方式,一种是标志位,一种是通过检查线程运行状态,通过quit,wait来实现,这里我们用第二种方式退出线程。

标签:界面,QT,自定义,步骤,开启,线程,信号,cpp
From: https://blog.csdn.net/wangjie36/article/details/136882256

相关文章

  • 数据清洗使用Parallel 多线程
    一.概述在开发数据清洗时,ES数据集有600w条,每一条的子对象又有几十条,需要拿到子对象去重后的集合,使用分批提取ES数据,共535批。开始使用List来操作,关键代码如下:varspecListAll=newList<SpecInfo>();for(inti=0;i<batchCount;i++)......
  • QT自定义带参数信号与槽函数
            我的软件界面是这样的,点击图标按钮后进入子项的参数配置。    由于按钮众多,每个按钮都有点击事件,一个个去写是在太多麻烦,而且我的这个配置软件各个子项的参数配置页面基本是差不多的,只是传递的参数有差异而已。    通过自定义一个信号,用于......
  • 毕业设计——基于PyQT的即时通信软件的设计与实现
    基于PyQT的即时通信软件的设计与实现如有源码需要欢迎联系博主,可提供远程部署支持服务端所需环境名称版本python3.9.12redis-server6.0.18redis4.5.1Flask2.3.2flask-babel3.1.0Flask-RESTful0.3.9功能列表序号功能名称1注册2登录3获取当前用户信......
  • 多线程并发聊天室简单实现代码详解 -- 涉及网络编程,多线程和线程同步的知识
            本项目主要完成多线程并发聊天室的基础功能,即多个客户端之间通过服务器可以实现群发消息,重点在于学习网络编程,多线程和线程同步的基础知识(基于Linux)。    下面我会详解每一部分的代码。1.主线程        1.1首先由于是自己在电脑里面测试,......
  • Qt QPolarChart极坐标图(阿基米德线、四叶曲线、六叶花瓣、三叶花瓣、心形曲线)
    QChart还有专门画极坐标的类QPolarChart,它的界面是一个圆盘。注意在使用之前,包括命名空间QT_CHARTS_USE_NAMESPACE,.pro文件中也要增加QT+=charts.1#include<QApplication>2#include<QDebug>3#include<QtCharts/QScatterSeries>4#include<QtCharts/QLineSer......
  • pycharm中怎么使用不同版本的包,如(paho-mqtt)
    在PyCharm中使用低版本的paho-mqtt库与在其他Python环境中使用它的方式相同。首先,你需要知道你想要使用的paho-mqtt的具体版本号,然后通过pip安装该特定版本。以下是如何在PyCharm中安装和使用低版本paho-mqtt的步骤:打开PyCharm并打开你的项目。在PyCharm的底部,有一个名为"Te......
  • 一个基于配置文件构建有向无环图,并多线程运行图上节点的例子
    #include<iostream>#include<memory>#include<thread>#include<vector>classNode{public:virtualvoidshow()=0;virtualboolhasFinished(){returnhas_finished_;}protected:boolhas_finished_=false;};classA......
  • CSIE3310操作系统线程包问题
    机器问题1-线程包CSIE3310-操作系统:100TA时间截止日期前10:00-12:00,中船重工R428号楼目录1摘要12环境设置23第1部分(60分)23.1功能说明。2.3.2样本输出。3.4第2部分(40分)44.1功能说明。4.4.2提醒。4.4.3样本输出。5.5运行公共测试用例56提交和分级56.1源代码。5.6.2解压缩后的文件夹......
  • C# 多线程锁
    C#多线程锁分类lock(Monitor):lock是C#中的关键字,它实际上是Monitor类的一个简化版本的语法糖。使用方式:lock(obj){//代码块},其中obj是一个对象引用,所有线程都试图获取该对象的互斥锁。功能:确保同一时间只有一个线程可以进入受保护的代码块。应用场景:适用......
  • QT网络编程之实现UDP广播发送和接收
    一.UDP广播介绍UDP广播地址固定IP地址为:XXX.XXX.XXX.255。如果向全网段发送广播消息,那么广播地址为:255.255.255.255;如果向单个网段发送广播消息,例如你的IP是192.168.31.104,那么广播地址为192.168.31.255。广播消息接收方需要绑定0.0.0.0地址并监听指定端口即可收到广播的群......