【QT5-自我学习-线程qThread移植与使用-通过代码完成自己需要功能-移植小记3】

news2025/2/22 14:13:45

【QT5-自我学习-线程qThread移植与使用-通过代码完成自己需要功能-移植小记3】

  • 1、前言
  • 2、实验环境
  • 3、自我总结
    • (1)文件的编写
    • (2)信号与槽的新理解
    • (3)线程数据的传递
  • 4、移植步骤
    • 第一步:添加新文件
    • 第二步:初始化线程与连接内容
    • 第四步:编写线程文件与自定义内容
    • 第五步:补充其它内容
  • 5、实验代码-无
  • 6、细节部分
      • (1)各种报错
      • (2)undefined reference to。。。
      • (3)缺少“Q_OBJECT”关键字
  • 7、总结

1、前言

学习线程其实有一段时间了,当时只是学习,没有实际用起来,最近做的一个qt程序,发现如果不使用线程,那么就会导致界面卡死,这样才体现出线程的实际作用。

这里是第三章,主要是说明如何使用移植,如何嵌入到自己项目中。
并且开启本章前,默认你已经至少练习了一种线程使用方式,如果你练了,那么移植也是非常简单。

2、实验环境

实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样。
系统环境:window环境
QT软件版本:qt 5.14.2

在这里插入图片描述

3、自我总结

(1)文件的编写

移植的话,如果我们想套在自己的程序上,其实主要两个部分的编写,更准确的是两个文件编写。
1、一部分就是线程文件:对于线程文件,我们需要自己知道,哪里是线程需要外壳,哪里是自己想要跑得程序库内容。
如下举例,在run内里内容,就是咱们自己移植后,需要替换的内容,这里需要我们自己跑自己内容。
在这里插入图片描述
2、另一部分就是主线程文件:在本例中,就是mainwindow.cpp内容,里面主要是连接“connect”,将函数信号槽等连接起来,这样我们点击按键才会触发相应函数。
在这里插入图片描述

(2)信号与槽的新理解

这里算是我自己的一个新理解,我自己在移植的时候,其实在按键里写其他功能内容,同样移植的时候,就复制了这部分内容。但是实际调用功能时,没有点击按键,结果就是咋整,都进不去线程。

用文字描述还是有点抽象,这里如下代码举例、

.....
    connect(ui->pushButton,&QPushButton::clicked,this,[=](){
        //发送信号
        emit starting(10000);
        //启动线程
        gen->start();
    });
......

void MainWindow::on_pushButton_clicked()
{
    ......
}


如上,如果我在主界面直接点击按键,是一定可以触发函数 >>on_pushButton_clicked() 和 开启线程的。
因为按键会触发一个clicked信号。
在这里插入图片描述
但是我实际应用时,也是这样写的,但是我不会去点击这个按键,而是使用软件代码去调用函数>>on_pushButton_clicked() ,这样虽然函数会执行,但是不会开启线程,因为没有clicked信号。

这对我这样的新手来说,是一次认知小提升,以前听到理论是提到信号和槽可以分开的,但是用久了,都是一个信号一个槽,会自然认为他们是一体的,没想过要看成两个独立东西。

(3)线程数据的传递

另外另外一点是线程之间传递数据的方式,开始自己不太会的话,可以使用全局变量,但是按照作者的教学,其实用跟简单的方式,这块我着暂时没有深入更多,但以后需要的话,还是需要自己仔细研究下。
在这里插入图片描述

4、移植步骤

这里大概讲讲移植需要做的事情,以供参考。

第一步:添加新文件

在自己工程加入新的.cpp和.h文件
在这里插入图片描述
用来盛放我们自己功能函数与线程这层外壳。
在这里插入图片描述

第二步:初始化线程与连接内容

这里主要是mainwindow.cpp内容,这些函数完全可以封装一下,只要是连接线程作用。
在这里插入图片描述

第四步:编写线程文件与自定义内容

回到线程函数,我们将线程内容填写完,同时写好自己需要内容。

在这里插入图片描述

第五步:补充其它内容

当然还有其它内容需要补充下,比如一些包含文件,一些声明等。
在这里插入图片描述
在这里插入图片描述

5、实验代码-无

本次无实验代码,主要是内容讲解。

6、细节部分

自己调试过程中,或者说移植过程中还是遇到了一些问题的,将其记录下来。

(1)各种报错

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当时报错的时候,真是一脸懵逼,完全不知道为啥,看代码就定位到447行,查看很久才知道,AexplicitA,就是自己失误打上去的,后来删除后,相继问题就没有,真的很神奇,自己都不知道咋打上去的。

(2)undefined reference to。。。

简单说,就是没有定义fnSend这个函数,这个好像和上一个问题一样的,在关键文件打错了,连带的,后续就没有了。
在这里插入图片描述

(3)缺少“Q_OBJECT”关键字

在这里插入图片描述

7、总结

这样线程也可以告一段落了,等使用的时候,添加进来就可以。

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

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

相关文章

在Linux系统上安装和配置Redis数据库,无需公网IP即可实现远程连接的详细解析

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 Redis作为一款高速缓存的key value键值对的数据库,在…

React组件间数据传递(弹框和高阶组件(HOC)特性实现)

前言 在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。而在复杂的应用中,不同组件之间的数据传递问题显得尤为关键。在本文中,我们将探讨一种高效的方法,即如何利用弹框和高阶组件特性来实现 React 组件间的数据…

vue3 基础知识 ( webpack 基础知识)05

你好 文章目录 一、组件二、如何支持SFC三、webpack 打包工具四、webpack 依赖图五、webpack 代码分包 一、组件 使用组件中我们可以获得非常多的特性: 代码的高亮;ES6、CommonJS的模块化能力;组件作用域的CSS;可以使用预处理器来…

芯片行业震荡期,数字后端还可以入吗?

自去年开始,芯片行业仿佛进入了动荡期,经历了去年秋招和今年春招的小伙伴都知道,如今找工作有多难。 半导体行业人才缩减、各大厂裁员,在加上高校毕业生人数破千万,对于即将踏入IC这个行业的应届生来说,今…

存储过程的使用

一、实验目的 熟练掌握使用 SQL SERVER 2000 创建和执行存储过程的方法。 熟练掌握存储过程的删除操作。 二、实验准备 1.熟悉 SQL SERVER 2000 设计环境; 2.熟悉存过过程的创建方法、步骤 三、实验内容 1、利用企业管理器或查询分析器…

在线OJ平台项目

一、项目源码 Online_Judge yblhlk/Linux课程 - 码云 - 开源中国 (gitee.com) 二、所用技术与开发环境 1.所用技术: MVC架构模式 (模型-视图-控制器) 负载均衡系统设计 多进程、多线程编程 C面向对象编程 & C 11 & STL 标准库 C Boost 准标…

建议收藏|软考机构推荐看这一篇就够了

需要最近因为软考改革成机考,大家都在问还有没有必要找机构学?本来已经进入自学阶段的考生,也纷纷开始慌张机考改革会不会影响考试难度?今天胖圆给大家总结一下软考要不要报机构?市面上的软考培训机构如何选择&#xf…

高手速成|数据库脚本生成工具

高手速成|数据库脚本生成工具 文章目录 高手速成|数据库脚本生成工具前言1、软件的安装及使用2、建立新工程3、创建Conceptual Data Model(概念数据模型)4、将E-R图转化为其他数据库模型5、导出DBMS代码(Sql执行脚本)6、执行sql脚…

【boost网络库从青铜到王者】第六篇:asio网络编程中的socket异步读(接收)写(发送)

文章目录 1、简介2、异步写 void AsyncWriteSomeToSocketErr(const std::string& buffer)3、异步写void AsyncWriteSomeToSocket(const std::string& buffer)4、异步写void AsyncSendToSocket(const std::string& buffer)5、异步读void AsyncReadSomeToSocket(cons…

Java 8 Stream 之 collect() 的奇技淫巧

来源:blog.csdn.net/qq_35387940/ article/details/127008965 前言 正文 第一个小玩法 第二个小玩法 前言 本身我是一个比较偏向少使用Stream的人,因为调试比较不方便。 但是, 不得不说,stream确实会给我们编码带来便捷。 所以还是忍…

python开发环境搭建

1、安装python 下载地址:https://www.python.org/downloads/windows/ 双击安装。 安装完验证: 2、安装IDE 下载地圵:https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 免费版本 3、安装依赖包 在项目的根目录下…

【RuoYi移动端】HBuild工具插件安装和系统配置manifest.json

一、点【工具】-【插件安装】安装如下工具 二、点【manifest.json】

搭建Tomcat HTTP服务:在Windows上实现外网远程访问的详细配置与设置教程

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…

数据库概况

数据的基本概念: ①数据 描述事物的符号记录,包括数字,文字,图形,图形,声音,档案记录等以“记录”形式按统一的格式进行存储。 ②表 将不同的记录组织在一起 用来存储具体数据 ③数据库 表的…

I/O多路复用 select 、poll

前言 套接字通信并发如果我们服务器端想实现并发,有两种处理方式,第一种是通过多进程的方式来处理并发,第二种是通过多线程的方式来处理服务器端的并发。 【问题】如果服务器端的程序只有一个线程,或者说只有一个进程&#xff0…

腾讯云新老用户优惠券免费领取方法分享

腾讯云优惠券是腾讯云的一种优惠方式,领券之后购买腾讯云相关产品可以享受优惠,下面给大家分享腾讯云新老用户优惠券免费领取方法,助力大家轻松上云! 一、腾讯云优惠券领取方法 腾讯云新用户优惠券:点此领取 腾讯云老…

ERP系统解析:全面了解企业资源规划系统

在当今快节奏的商业环境中,有效的企业资源计划(Enterprise Resource Planning,简称ERP)系统对于组织的成功运营至关重要。ERP系统是一种集成管理软件,通过整合各个部门的信息和流程,实现资源的高效利用和运…

11.redis持久化

1.redis持久化 Redis的所有数据都是保存在内存中,因此redis重启后数据就丢失了,所以需要不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);或者把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。 …

Exploring Lottery Prompts for Pre-trained Language Models

Exploring Lottery Prompts for Pre-trained Language Models 文章链接 清深的工作,比较有意思的一篇。作者先给出假设,对于分类问题,在有限的语料空间内总能找到一个prompt让这个问题分类正确,作者称之为lottery prompt。为此&…

Rust常用加密算法

哈希运算(以Sha256为例) main.rs: use crypto::digest::Digest;use crypto::sha2::Sha256;fn main() { let input "dashen"; let mut sha Sha256::new(); sha.input_str(input); println!("{}", sha.result_str());} Cargo.toml: [package]n…