Fu_Lin_
为人朴实正直,有积极进取的心态,努力拼搏。性格沉稳内敛,做事细心踏实,个性坚韧,能吃苦耐劳,对工作有很强的责任感!有很强进取心和团队协作精神,学习能力、适应能力、承受压力能力较强,善于挑战自我。
展开
-
Qt/Qml零基础入门系列文章总纲(持续更新中...)
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例原创 2020-11-25 14:37:02 · 1747 阅读 · 8 评论 -
Qt系列文章之一(Qt 下载、安装,组件管理软件储存库设置,离线/在线安装方式)
前言上面说的方式,其实在我的其他博客多多少少都提及过,或者单独写成篇,这里充其量是总结归纳,所以可能有些地方我会直接内部跳转文章链接,只因为篇幅太大,重新聚集到一篇文章上面,让你们看着也会很累,当然不会全部都是链接跳转的,一个一个来,先从下载开始Qt下载这边只介绍具体的下载地址,本文也直接让Qt5.x系列,其他版本不涉及,因为Qt目前的大版本是5.x系列,最新版本最近刚更新到5.15。Qt6 于2020年年底发布,预览版已经出了,我尝试用过,体验还是不太好,因为要更改的东西太多了,删除了很多库,尤其原创 2020-11-25 14:37:59 · 2078 阅读 · 5 评论 -
Qt系列文章之二(Qt 环境搭建,主要针对MSVC/Android 平台)
前言前文我们已经将Qt安装好了,可能会有人需要安装对应的环境搭建,当然如果你是默认使用Mingw编译Qt就忽视这篇文章,本章针对的是已经安装好MSVC和Android平台的Qt应用!开始搭建Qt MSVC环境搭建很多小伙伴在安装好Qt MSVC后发现还不能正常的如Mingw那样直接写程序来编译运行,因为会报错,可能启动的时候就会提示错误,不管报什么错请按照我下面的步骤一步一步来,绝对好用!安装Visual Studio 2019版,最新版本(不想安装的可以忽略)为什么要安装Vs呢?因为安装它原创 2020-11-26 09:56:30 · 702 阅读 · 0 评论 -
Qt系列文章之三(编写简单程序Hello world 到不同平台winPc/Android)
前言在前面所有的部署环境都安装好后,如果要跑一个简单的入门程序,通常会先编写一个**“Hello World”程序。我们也用Qt Creator编写一个“Hello World”**程序,以初步了解Qt Creator设计应用程序的基本过程,对使用Qt Creator编写Qt C++应用程序建立初步的了解。正文新建一个项目单击Qt Creator的菜单项**“File"→“New File or Project"** 或者在主面板点击New菜单按钮,出现如下图的对话框。在这个对话框里选择需要创建的项原创 2020-11-30 10:37:57 · 2873 阅读 · 17 评论 -
Qt系列文章之四(如何在visual Studio 里使用Qt)
前言在QtCreator中可以使用MSVC编译工具对Qt项目进行编译。若有人比较习惯于使用Visual Studio,或某些项目必须使用Visual Studio,也可以在VisualStudio里创建和管理Qt程序项目。要在Visual Studio 中使用Qt,需要安装-一个Visual Studio 的Qt插件,这个插件程序由Qt公司提供。目前最新的Visual Studio Qt插件是Qt Visual Studio Tools 2019,插件如下图, 可以从Visual Studio 或Qt官网原创 2020-12-01 09:33:53 · 916 阅读 · 0 评论 -
Qt系列文章之五(QtCreator 里使用Qt 技巧)
前言QtCreator在设计界面或编辑代码时,有–些快捷键和使用技巧,熟悉这些快捷键和使用技巧,可以提高工作效率。下表是Qt Creator的一些快捷操作的总结。快捷键表单功能快捷键说明Switch Header/SourceF4在同名的头文件和源程序文件之间切换Follow Symbol Under CursorF2跟踪光标下的符号,若是变量,可跟踪到变量声明的地方:若是函数体或函数声明,可在两者之间切换Switch Between Function Dec原创 2020-12-02 08:46:54 · 647 阅读 · 0 评论 -
Qt系列文章之六(Qt 元对象系统介绍)
文章目录前言正文概述元对象系统介绍前言Qt是一个用标准C++编写的跨平台开发类库,它对标准C++进行了扩展,引入了元对象系统、信号与槽、属性等特性,使应用程序的开发变得更高效。本章将开始介绍Qt的这些核心特点,对于理解和编写高效的QtC++程序是大有帮助的。本章还介绍 <QtGlobal>头文件 中Qt的一些全局定义,包括数据类型、函数和宏等,介绍Qt的容器类及其相应迭代器的使用方法。这些全局定义和容器类在程序中经常用到,了解其原理便于理解后面遇到的一些实例程序。正文概述Qt本身并原创 2020-12-02 10:47:30 · 639 阅读 · 0 评论 -
Qt系列文章之七(Qt 属性系统介绍)
文章目录前言属性定义属性的使用动态属性类的附加属性前言前面已经讲解完了元对象系统,今天准备开始着手Qt的属性系统,属性系统主要分为动态属性和附加信息,所以大家不必要把这个想的太难,其实无非就是一个Qt提供的宏定义,玩转了也就那回事了!所以不多讲废话,看了网上好多写Qt属性的,就那么几个使用方法能写几页纸,确实是看的头大,所以我这边都不喜欢码字凑篇幅,直接上重点,所以篇幅会比一般网上的都要精简!属性定义Qt提供一个Q_PROPERTY() 宏可以定义属性,它也是基于元对象系统实现的。Qt的属性系统与原创 2020-12-02 11:31:50 · 469 阅读 · 0 评论 -
Qt系列文章之八(Qt 信号和槽使用)
文章目录前言特点介绍连接方式连接参数说明使用sender()自定义信号实践前言 写了这么久,终于来到Qt核心机制讲解了,这个玩意不搞通,很多东西无法讲解下去,当然在前文中已经初步介绍了信号与槽的使用。特点介绍 信号与槽是Qt的一个核心特点,也是它区别于其他框架的重要特性。信号与槽是对象间进行通信的机制,也需要由Qt的元对象系统支持才能实现的。 Qt使用信号与槽的机制实现对象间通信,它隐藏了复杂的底层实现,完成信号与槽的关联后,发射信号时并不需要知道Qt是如何找到槽函数的。Qt的信号与槽机制与原创 2020-12-02 14:38:59 · 692 阅读 · 0 评论 -
Qt系列文章之九(Qt 数据类型介绍以及迭代器使用上)
文章目录前言QtGlobal介绍QtGlobal包含的数据类型定义QtGlobal包含的方法QtGlobal包含的宏定义前言 这一章主要介绍Qt包含的数据类型和迭代器,C/C++有自己的的标准类型和迭代器,Qt也有它自身包装的独特类型如qint8、qint64等和相关Qt包装实用的迭代器,究竟如何使用呢?我们先从QtGlobal 这个头文件开始入手QtGlobal介绍 <QtGlobal> 头文件包含了Qt类库的一些全局定义,包括基本数据类型、函数和宏,一 般的Qt类的头文件都原创 2020-12-02 17:50:46 · 512 阅读 · 0 评论 -
Qt系列文章之十(Qt 数据类型介绍以及迭代器使用下)
前言 前面已经详细阐述了Qt 中QtGlobal 包含的常用数据类型和方法还有一些宏定义,因为篇幅的问题,所以做了上下两章来讲。方便各位消化和耐看!那么今天这章主要就是讲解Qt 独有的迭代器使用了! 话说使用迭代器必定少不了容器,没有容器迭代器就无法现行,所有下面我们从容器开始入手,先将Qt的容器过一遍眼,然后详细讲解各种容器的迭代器使用方式!容器类容器类概述 Qt提供了多个基于模板 的容器类,这些容器类可以用于存储指定类型的数据项,例如常用的字符串列表类 QStringList 就原创 2020-12-03 10:40:53 · 457 阅读 · 0 评论 -
Qt系列文章之十一 (Qt 相关模块介绍)
文章目录前言Qt类库的模块分类介绍Qt基本模块Qt附加模块Qt 增值模块Qt 技术预览模块Qt 工具前言 Qt的模块相当多,不去分类看,可以看得眼花缭乱,不知道从何处开始看起,仔细分类后其实有没有多少,一共可以分为四个大模块和1个工具库,有兴趣了解更多的可以自己去Qt官方文档中搜索 All Modules 关键词,就一目了然了,好了,下面我开始逐步详细讲解每个大模块的作用和它包含的小模块的含义。上菜!Qt类库的模块分类介绍 Qt类库里大量的类根据功能分为各种模块,这些模块又分为几大类:Qt原创 2020-12-03 17:04:39 · 591 阅读 · 0 评论 -
Qt系列文章之十二(网络编程初体验)
前言 Qt网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类,如用于TCP通信的QTepSocket和QTepServer,用于UDP通信的QUdpSocket,还有用于实现HTTP、FTP 等普通网络协议的高级类如QNetworkRequest, QNetworkReply和QNetworkAccessManager。Qt网络模块还提供用于网络代理、网络承载管理的类,提供基于安全套接字层(Secure Sockets Layer,SSL) 协议的安全网络通信的类。 本章主要介绍基本原创 2020-12-05 09:23:33 · 483 阅读 · 0 评论 -
Qt系列文章之十三(QTCP通信概述)
文章目录前言TCP概述前言 在前面讲完Qt的辅助网络请求类后,今天开始正式进入实践常用的网络通信方式——TCP通信, 这章主要讲解TCP通信的含义和Qt相关的Tcp类库详解,具体实践程序设计讲解放到下一章,本章主打基础知识讲解!TCP概述 TCP(Transmission Control Protocol) 是一种 被大多数Internet网络协议(如HTTP和FTP)用于数据传输的低级网络协议,它是可靠的、面向流、面向连接的传输协议,特别适合用于连续数据传输。 TCP通信必须先建立TCP连原创 2020-12-08 10:13:12 · 772 阅读 · 0 评论 -
Qt系列文章之十四 (基于QTcpServer TCP服务器端程序设计)
前言上文主要讲解了服务端和客户端的一些基本核心类,TCP相关的概念理论,本章将进行实战代码讲解,一步一步详细解读,从应用程序入手,简单直接,高效通用!新建项目首先新建一个新工程。如下图:取名TcpServer, 下一步操作不累赘,新建工程完毕后,我们开始简单的界面搭建,如下图:...原创 2020-12-10 11:07:40 · 665 阅读 · 0 评论 -
使用 QTcpServer设置多线程客户端,解决大数据解析方案
文章目录前言两种多线程服务端工作方式第一种第二种服务端类实现客户端多线程类实现关于解析前言最近有个问题,自己需要建立TCP服务端,等待客户端来连接,然后客户端会狂轰乱炸发送数据,大概是10毫秒50多组数据,这50多组数据需要画成曲线图展示出来,而每次过来都是3组,所以换言之也就是10毫秒150多个点数据,而这些点数据又是十六进制报文方式,有包头,包尾,校验码等等…所以解析就得花费一定时间,如果不放在线程中处理,就信号槽这个关联的频繁调用就会卡崩主线程UI。两种多线程服务端工作方式第一种第一种是最方原创 2022-05-11 14:58:57 · 1091 阅读 · 0 评论 -
Qt系列文章之十五 (基于QTcpSocket TCP客户端程序设计及通信演示)
文章目录前言客户端项目新建与服务端建立连接与TCPServer的数据收发交互动态演示总结前言 上一章主要讲述了服务端的程序设计,本章主要讲述客户端的程序设计和对应的通信交互,有了前面的基础,基本上下面的讲解,我想已经非常容易理解了!客户端项目新建 还是老样子,先新建一个客户端的程序项目,如下图: 取名为TCPClient项目名称!新建工程完毕后,我们开始简单的界面设计,运行效果图如下: 客户端程序TCPClient只需要使用一个 QTcpSocket 对象,就可以和服原创 2020-12-11 17:10:32 · 485 阅读 · 0 评论 -
Qt系列文章之FTP补充( 实现FTP通信概述及程序实现)
文章目录前言基于QNetworkAccessManager的FTP头文件代码源代码建议前言前面写了tcp, udp通讯,唯独将ftp给漏掉了, 在Qt5之前也就是qt4是有QFTP这个类可以直接使用的,但是在Qt5以后,这个类就被官方给删除了,所以后面采用Ftp都是基于QNetworkAccessManager访问的,使用这个类不能设置ftp独有的命令来操作,所以我自己基于QTcpSocket开发了一套基于多线程的Ftp断点续传下载上传功能,可以创建目录,切换路径,实现各种复杂的ftp命令交互,已经上传原创 2021-03-30 15:36:47 · 570 阅读 · 0 评论 -
Qt 系列文章之Qt5.12.x 编译QFtp项目
文章目录前言克隆QFtp源码编译源码编译错误缺少perl解决部署编译好的库使用编译好的库前言最近遇到几个Ftp需求,想使用Qt官方的Ftp试试,就打算自己编译QFtp,开始以为很复杂,其实没啥难度!三两下就搞定了!下面看具体步骤克隆QFtp源码从 GitHub 下载 QFtp:qtftp源码或者使用命令下载 :git clone https://github.com/qtproject/qtftp编译源码首先由qtcreate打开根目录下的pro,项目里面有三个可以直接看到的项目如原创 2021-05-17 18:04:26 · 653 阅读 · 1 评论 -
Qt系列文章之十六(基于QUdpSocket 实现UDP通信概述)
前言 前面介绍完了TCP相关通信,肯定少不了UDP的通信,虽然说现在UDP使用没有TCP那么频繁,但是也还是有用武之地的,这里也会做一个详细的介绍和实战程序演示。通信概述 UDP (User Datagram Protocol,用户数据报协议) 是轻量的、不可靠的、面向数据报(datagram)、 无连接的协议,它可以用于对可靠性要求不高的场合。与TCP通信不同,两个程序之间进行UDP通信无需预先建立持久的socket连接,UDP每次发送数据报都需要指定目标地址和端口如下图:UDP连接原创 2020-12-14 09:15:31 · 1348 阅读 · 0 评论 -
Qt系列文章之十七(基于QUdpSocket 实现的单播、广播、组播程序设计实例上)
文章目录前言UDP通信实例程序功能实例窗口类定义代码UDP通信的实现UDP单播、广播代码实现讲解运行效果实践通信动态图前言 在前面讲解了UDP的基本概念后,还是要通过实例代码来全新过一遍才是真正的走通,实践出真知嘛,所以下面会用一个实例来分别讲解单播、广播、组播的区别和特点,其实,一般用UDP也就是单播用的对,不过多了解必有用处!UDP通信实例程序功能 老规矩,先新建一个UDP项目,如下图: 项目名称就设为UDP,点击下一步生成项目,设计简单的界面构造,运行实例如下:原创 2020-12-16 16:24:12 · 625 阅读 · 3 评论 -
Qt系列文章之十八(基于QUdpSocket 实现的单播、广播、组播程序设计实例下)
前言 上文因为篇幅和组播特性的问题,我只写了单播和广播,这篇主打组播的程序实现和相关讲解组播的特性 在Qt系列文章之十六(基于QUdpSocket 实现UDP通信概述) 文章中,给出了组播示意图,简单表示了组播的原理。UDP组播是主机之间 一对一组 的通信模式,当多个客户端加入由一个组播地址定义的多播组之后,客户端向组播地址和端口发送的UDP数据报,组内成员都可以接收到,其功能类似于QQ群。 组播报文的目的地址使用D类IP地址,D类地址不能出现在IP报文的源IP地址字段。用同一个IP原创 2020-12-17 14:53:24 · 771 阅读 · 0 评论 -
Qt系列文章之QUdp 补充(Udp 组播收不到数据解决方案)
文章目录前言问题分析问题解决前言 最近项目用到了Udp,发现Udp加入组播后,尽然收不到设备发送过来的数据,一顿操作,各种问题搜索,发现还是无解,哪怕使用Qt如何设置SO_REUSEADDR方式也尝试过了,发现还是无解问题分析 先说下SO_REUSEADDR参数,此参数是原生底层udpSocket,需要设置的setSocketOption 方法中的参数,我当时为什么要考虑这个参数呢,因为有同事用原生socket写的udp就能收到,而我用Qt写的竟然收不到,所以当时考虑差异化在这里,其实不是这个问原创 2021-04-16 09:20:25 · 4752 阅读 · 6 评论 -
Qt系列文章之十九(基于QNetworkAccessManager 实现HTTP协议网络应用程序文件下载)
文章目录前言Qt高层网络操作类介绍基于HTTP协议的网络文件下载(包含下载进度、当前下载速度、剩余时间)下载动态示意图前言 前面讲解了主流的TCP/UDP请求后,该到用处最多的HTTP请求了,在Qt中要使用HTTP请求,在Qt4的时候有专门的QHttp,QFtp类使用,可惜在Qt5已经全部干掉了,统一封装了接口QNetworkAccessManager ,下面主要就是围绕该类展开一个系统性的介绍和使用!玩转此类,Qt5的网络请求基本就不在话下了!Qt高层网络操作类介绍 Qt网络模块提供–些类实原创 2020-12-22 16:14:52 · 1371 阅读 · 0 评论 -
Qt系列文章之二十(基于QNetworkAccessManager 实现HTTP协议网络应用程序下载文件——断点续传功能)
文章目录前言实例讲解动态图显示效果前言 前文主要讲解了Http下载的当前实时网速记录,剩余时间,下载大小,唯独没有讲解如何使用断点续传,因为断点续传有点啰嗦和麻烦,所以才单独开辟一章,首先断点续传这个功能不是Http自带的,而是需要服务端那边有相应处理才行,如果服务端没有对应处理 ,你再断也就是断了,翻了天也续不上来,所以不要认为http断点续传是天生就自带的功能,这个主要是看对应服务端是否有这一功能,做了这一处理,一般的大型下载服务端,如Nginx之类的映射下载都是带了此机制的,如果是自定义开发原创 2020-12-23 11:07:12 · 1304 阅读 · 13 评论 -
Qt系列文章之二十一(基于QNetworkAccessManager 实现HTTP协议网络应用程序文件上传功能)
前言 在前面写完HTTP相关下载后,上传肯定也是少不了的,虽然平时我们上传用的少,但是也是一个不可或缺的功能,所以今天打算简单的讲讲Qt相关的Http上传功能。上传接口 有了前面的关于Qt网络的基础类的了解,下面的介绍大家肯定会一点就通!当然我们的上传同样是基于 QNetworkAccessManager 开发的, 大家可以回忆下在前面下载的章节中我们用到的是Get,如下:QNetworkReply *QNetworkAccessManager::get(const QNetworkRe原创 2020-12-30 16:47:53 · 1032 阅读 · 0 评论 -
Qt系列文章之二十二(Qt多媒体功能介绍)
前言 说完网络编程后,现在也应该来到媒体库的使用了,一般媒体库会结合网络编程使用,比如从网上拉取音频/视频数据,然后通过媒体库来进行播放,编码,压缩等相关功能,而Qt已经内置好了这些相关的媒体库,一般需求都用的到,除非需求很特殊就推荐自己编译一些第三方的媒体库,例如FFmpeg 库,或者使用基于FFmpeg的现成VLC第三方播放器等,好了,废话不多说,进入正题,首先介绍Qt媒体库有哪些花样,是什么形态的,又如何使用了?Qt多媒体模块功能概述 Qt多媒体模块提供了很多类,还为音频和视频播放、原创 2021-01-05 11:01:43 · 657 阅读 · 0 评论 -
Qt系列文章之二十三(使用 QMediaPlayer 开发播放器、播放音乐/视频文件)
前言 前面讲完了多媒体的概念功能,本章将进行实例程序的讲解分析,带入快速集成项目使用,还是先介绍下该类的用途和主要成员,首先QMediaPlayer可以播放经过压缩的音频或视频文件,如mp3、mp4、wmv等文件, QMediaPlayer可以播放单个文件,也可以和 QMediaPlaylist 类结合,对一个播放列表进行播放。所以使用QMediaPlayer和QMediaPlaylist可以轻松地设计一个自己的音乐或视频播放器。成员介绍 QMediaPlayer的主要公共函数和槽函数见下原创 2021-03-04 11:47:17 · 1062 阅读 · 0 评论 -
Qt系列文章之二十四(使用 QAudioRecorder开发音频录入)
前言 前面已经介绍了如何使用 QMediaPlayer 开发播放器, 本章将讲解音频输入的使用,音频无非就是录音,然后保存成实体数据,所以流程上来说是很简单的,下面看Qt开发音频录入的详细介绍。 前音频输入可以使用QAudioRecorder或QAudioInput两个类实现。QAudioRecorder是高层次的实现,输入的音频数据直接保存为文件,也可以通过QAudioProbe访问原始的音频数据。QAudioInput 是低层次的实现,直接控制音频输入设备的参数,并将音频录制数据写入-一个流设备原创 2021-04-15 09:51:32 · 1176 阅读 · 0 评论 -
Qt系列文章之二十五(使用QAudiolnput获取音频输入)
前言前面讲解了音频的录入和音频文件的播放,本章将会继续讲解音频输入的获取图形显示,下面看基本功能概述QAudioInput获取音频输入功能概述QAudioInput 类提供了接收音频设备输入数据的接口,创建QAudioInput 对象实例时,需要用两个参数,一个是 QAudioDeviceInfo 类表示的音频设备,一个是 QAudioFormat 表示的音频输入格式。QAudiolnput::start() 函数开始音频数据输入时,需要指定一个流设备接收输入的音频数据,如可以指定一个QFile表原创 2021-05-13 10:59:56 · 1416 阅读 · 0 评论 -
Qt系列文章之二十六(基于QMediaPlayer 在 QVideoWidget或QGraphicsVideoItem 组件上播放视频)
前言前面讲解了 QMediaPlayer 播放音频文件,但是视频文件播放器一直没去讲,本章将会详细讲解如何播放视频的程序开发。QVideoWidget效果图播放概述使用 QMediaPlayer 可以进行视频文件解码,视频播放必须将视频帧在某个界面组件上显示,有 QVideoWidget 和 QGraphicsVideoItem 两种视频显示组件,也可以从这两个类继承,自定义视频显示组件。QMediaPlayer 也可以结合 QMediaPlaylist 实现视频文件列表播放。在QVideoWi原创 2021-05-13 15:42:22 · 1847 阅读 · 0 评论 -
Qt系列文章之二十七(基于QCamera摄像头使用)
前言本章将是Qt 媒体应用的最后一章节了,讲完本章,Qt媒体库的学习将到此为止!本章将学习Qt如何使用摄像头进行拍照和摄像等相关操作,下面先介绍以下有关Qt 摄像头的概述。摄像头控制概述Qt多媒体模块为摄像头控制提供了几个类,可以用于获取摄像头设备信息,通过摄像头进行拍照和录像。1、摄像头设备信息类QCameraInfo。QCameraInfo 用于获取系统的摄像头设备信息,有两个静态函数获取摄像头设备:QList<QCameraInfo> availableCameras(),原创 2021-05-26 09:26:51 · 1587 阅读 · 3 评论 -
Qt系列文章之二十八(基于QThread多线程概述)
系列文章总纲文章目录前言概念讲解QThread类功能简介QThread 常用接口介绍前言 终于算是写到一个比较核心的功能了,对于一个项目,多线程是必不可少的,当然有的也不需要,不是说做项目就一定要使用多线程,不过一般复杂点的项目,多线程是必不可少的,所以从本章开始,将详解Qt多线程应用,以及pthread的应用详解,C++11多线程等都会涉及,不过还是以Qt中的QThread为主,下面讲解QThread的概念。概念讲解 一个应用程序一般只有一个线程,一个线程内的操作是顺序执行的,如果有某个比较原创 2021-05-26 10:04:59 · 395 阅读 · 1 评论 -
Qt系列文章之二十九(基于QThread的掷骰子线程实例讲解)
系列总纲前言 上一章讲解了有关QThread多线程概述 相关知识点以及QThread的类库接口方法等介绍,看完的同学应该对QThread有个基本了解了,所以本章将直接用实例来验证QThread的使用,如何优雅的操控线程等。。。掷骰子线程DiceThread实例 Qt提供了2种多线程方式,当前采用方式一:继承QThread方式,然后实现QThread中的run方法来执行多线程 作为实例,定义一个掷骰子的线程类DiceThread,类的声明部分如下:...原创 2021-06-11 11:03:29 · 694 阅读 · 0 评论 -
Qt系列文章之三十(基于QThread的线程同步概述)
线程同步的概念 前文已经介绍了QThread的基本用法,以及两种方式的不同的用法和释义,今天说说同步的概念。 在多线程应用程序中,由于多个线程的存在,线程之间可能需要访问同一个变量,或一个线程需要等待另外一个线程完成某个操作后才产生相应的动作。例如,在上一节的实例程序中,工作线程产生随机的骰子点数,主线程读取骰子点数并显示,主线程需要等待工作线程产生一个新的骰子点数后再读取数据。实例程序中使用了信号与槽的机制,在产生新的骰子数之后通过信号通知主线程读取新的数据。 如果不使用信号与槽机制,Dice原创 2021-06-18 09:08:02 · 397 阅读 · 0 评论 -
Qt系列文章之三十一 (基于QThread互斥量的线程同步线程)
文章目录前言QMutex详解实例讲解效果图前言前面讲解了相关QThread的使用和同步概念,本节将着重讲解QThread同步的具体使用,下面将从 QMutex和QMutexLocker 展开讲解!QMutex详解QMutex 和 QMutexLocker 是基于互斥量的线程同步类,QMutex 定义的实例是一个互斥量,QMutex主要提供3个函数。lock(): 锁定互斥量,如果另外一个线程锁定了这个互斥量,它将阻塞执行直到其他线程解锁这个互斥量。unlock(): 解锁-一个互斥量,需要与原创 2021-07-08 16:54:14 · 289 阅读 · 0 评论 -
Qt系列文章之三十二 (基于QThread的QReadWriteLock和QWaitCondition 的线程同步)
前言上一页讲解了QMutex的同步使用,今天本节将讲解 QReadWriteLock和QWaitCondition 线程同步的使用以及相关概念知识QReadWriteLock使用上文使用互斥量时存在一个问题: 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。而实际上若只是读取一个变量,是可以让多个线程同时访问的,这样互斥量就会降低程序的性能。假设有一个数据采集程序,一个线程负责采集数据到缓冲区,一个线程负责读取缓冲区的数据并显示,另一个线程负责读取原创 2021-07-12 09:28:26 · 357 阅读 · 0 评论 -
Qt系列文章之三十三 (基于QThread的信号量的线程同步)
前言本章将是QThread中最后一个有关同步的方法介绍了,可能很少有人会用到使用信号量,不过了解该机制也是不错的,下面看我的简单介绍。信号量的原理信号量(Semaphore)是另一种限制对共享资源进行访问的线程同步机制,它与互斥量(Mutex)相似,但是有区别。一个互斥量只能被锁定一次,而信号量可以多次使用。信号量通常用来保护一定数量的相同的资源,如数据采集时的双缓冲区。QSemaphore 是实现信号量功能的类,它提供以下几个基本的函数:acquire(int n) 尝试获得n个资源。如果没原创 2021-07-20 14:54:54 · 373 阅读 · 0 评论 -
Qt系列文章之三十四 (线程题外话---从pthread 到QThread)
文章目录前言正文pthread线程的创建pthread 线程属性线程的取消和终止线程终止时的清理线程中特有的线程存储QThread 封装解刨QThread 如何封装pthread构造一个QThread对象start调用究竟发生了什么?start()是怎样调用到我们在MyThread重新实施的run()函数呢?gemfieldThread->quit()是怎么实施的呢?gemfieldThread->terminate()是怎么运行的?上面屡次提到的gemfieldThread->wait(原创 2021-07-28 16:28:47 · 490 阅读 · 0 评论 -
Qt系列文章之三十五 (自定义组件)
文章目录前言自定义Widget组件自定义Widget子类MyBattery自定义Widget组件的使用动态效果图前言 当UI设计器提供的界面组件不满足实际设计需求时,可以从QWidget继承自定义界面组件。有两种方法使用自定义界面组件,一种 是提升法( promotion),例如前面有一个demo中QGraphicsView组件提升为自定义的QWGraphicsView类,提升法用于界面可视化设计时不够直观,不能在界面上即刻显示自定义组件的效果;另一种是为UI设计器设计自定义界面组件的Widge原创 2021-08-05 18:07:26 · 500 阅读 · 0 评论