![](https://img-blog.csdnimg.cn/direct/bd8053d48bba4a4eada853ef6193c493.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Qt/C++学习笔记
文章平均质量分 75
记录平时学习Qt过程中的一些经验要点。公众号:Qt实战/Qt入门和进阶
feiyangqingyun
欢迎关注公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)
展开
-
Qt血的教训/细数Qt开发的各种坑/又爱又恨/欢迎围观留言评论
搞Qt开发十几年了,最初从Qt4.6开始,一直追新到现在的6.7版本,中间经历过无数的血的教训,简直是又爱又恨。其实Qt挺好的,但是还是要忍不住吐槽一下,本人还是希望Qt发展的越来越好,这样我的饭碗就能保住了。原创 2024-04-07 10:30:46 · 1519 阅读 · 1 评论 -
历时数月钻研推流/对比各种流媒体服务程序/PK总结
大量测试下来,网页显示视频流实时性从高到低依次是 webrtc > ws-flv > flv > hls。播放器打开rtsp/rtmp视频流实时性由具体的播放器控制,比如缓存大小和缓存时间,是否音视频同步等。由于flv拉流同源地址最大支持6路同时播放,所以要想实时性高而且网页播放支持多路就选择ws-flv,hls实时性最差。mediamtx推出来的hls/webrtc流可以直接地址复制到浏览器打开,不依赖额外的js播放器播放。原创 2023-08-18 10:08:59 · 978 阅读 · 0 评论 -
Qt系列文章022-QFTP编译
1 前言最近遇到几个Ftp需求,想使用Qt官方的Ftp试试,就打算自己编译QFtp,开始以为很复杂,其实没啥难度!三两下就搞定了!下面看具体步骤2 克隆QFtp源码从 GitHub 下载 QFtp:qtftp源码或者使用命令下载 :git clone https://github.com/qtproject/qtftp3 编译源码首先由qtcreate打开根目录下的pro,项目里面有三个可以直接看到的项目如上图能看到 examples、src、tests我们只编译第二个 src然原创 2021-11-07 09:38:36 · 855 阅读 · 0 评论 -
Qt系列文章016-UDP通信
1 前言 前面介绍完了TCP相关通信,肯定少不了UDP的通信,虽然说现在UDP使用没有TCP那么频繁,但是也还是有用武之地的,这里也会做一个详细的介绍和实战程序演示。2 通信概述 UDP (User Datagram Protocol,用户数据报协议) 是轻量的、不可靠的、面向数据报(datagram)、 无连接的协议,它可以用于对可靠性要求不高的场合。与TCP通信不同,两个程序之间进行UDP通信无需预先建立持久的socket连接,UDP每次发送数据报都需要指定目标地址和端口如下图:U原创 2021-11-07 09:19:38 · 500 阅读 · 0 评论 -
Qt系列文章020-HTTP断点续传
1 前言 上一篇文章主要讲解了Http下载的当前实时网速记录,剩余时间,下载大小,唯独没有讲解如何使用断点续传,因为断点续传有点啰嗦和麻烦,所以才单独开辟一章,首先断点续传这个功能不是Http自带的,而是需要服务端那边有相应处理才行,如果服务端没有对应处理 ,你再断也就是断了,翻了天也续不上来,所以不要认为http断点续传是天生就自带的功能,这个主要是看对应服务端是否有这一功能,做了这一处理,一般的大型下载服务端,如Nginx之类的映射下载都是带了此机制的,如果是自定义开发的服务端接口就要看是否带了原创 2021-11-07 09:32:26 · 989 阅读 · 0 评论 -
Qt系列文章008-Qt信号槽介绍
1 前言 写了这么久,终于来到Qt核心机制讲解了,这个玩意不搞通,很多东西无法讲解下去,当然在前文中已经初步介绍了信号与槽的使用。2 特点介绍 信号与槽是Qt的一个核心特点,也是它区别于其他框架的重要特性。信号与槽是对象间进行通信的机制,也需要由Qt的元对象系统支持才能实现的。 Qt使用信号与槽的机制实现对象间通信,它隐藏了复杂的底层实现,完成信号与槽的关联后,发射信号时并不需要知道Qt是如何找到槽函数的。Qt的信号与槽机制与Delphi和C++Builder的事件一响应比较类似,但是更加灵活原创 2021-11-06 13:47:56 · 716 阅读 · 0 评论 -
Qt系列文章026-QAudioRecorder音频导入
1 前言 前面已经介绍了如何使用 QMediaPlayer 开发播放器, 本章将讲解音频输入的使用,音频无非就是录音,然后保存成实体数据,所以流程上来说是很简单的,下面看Qt开发音频录入的详细介绍。 前音频输入可以使用QAudioRecorder或QAudioInput两个类实现。QAudioRecorder是高层次的实现,输入的音频数据直接保存为文件,也可以通过QAudioProbe访问原始的音频数据。QAudioInput 是低层次的实现,直接控制音频输入设备的参数,并将音频录制数据写入-一个流原创 2021-11-09 08:38:02 · 1295 阅读 · 0 评论 -
Qt系列文章029-QCamera摄像头
1 前言 本章将是Qt 媒体应用的最后一章节了,讲完本章,Qt媒体库的学习将到此为止!本章将学习Qt如何使用摄像头进行拍照和摄像等相关操作,下面先介绍以下有关Qt 摄像头的概述。2 效果图3 摄像头控制概述 Qt多媒体模块为摄像头控制提供了几个类,可以用于获取摄像头设备信息,通过摄像头进行拍照和录像。1、摄像头设备信息类QCameraInfo。QCameraInfo 用于获取系统的摄像头设备信息,有两个静态函数获取摄像头设备:QList<QCameraInfo> avail原创 2021-11-09 08:44:08 · 3080 阅读 · 6 评论 -
Qt系列文章007-Qt属性系统介绍
1 前言 前面已经讲解完了元对象系统,今天准备开始着手Qt的属性系统,属性系统主要分为动态属性和附加信息,所以大家不必要把这个想的太难,其实无非就是一个Qt提供的宏定义,玩转了也就那回事了!所以不多讲废话,看了网上好多写Qt属性的,就那么几个使用方法能写几页纸,确实是看的头大,所以我这边都不喜欢码字凑篇幅,直接上重点,所以篇幅会比一般网上的都要精简!2 属性定义 Qt提供一个Q_PROPERTY() 宏可以定义属性,它也是基于元对象系统实现的。Qt的属性系统与C++编译器 无关,可以用任何标准的C原创 2021-11-06 13:43:40 · 791 阅读 · 0 评论 -
Qt系列文章012-Qt网络模块
1 前言 Qt网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类,如用于TCP通信的QTepSocket和QTepServer,用于UDP通信的QUdpSocket,还有用于实现HTTP、FTP 等普通网络协议的高级类如QNetworkRequest, QNetworkReply和QNetworkAccessManager。Qt网络模块还提供用于网络代理、网络承载管理的类,提供基于安全套接字层(Secure Sockets Layer,SSL) 协议的安全网络通信的类。 本章主要介绍原创 2021-11-06 14:05:01 · 1338 阅读 · 1 评论 -
Qt系列文章023-FTP通信
1 前言 前面写了tcp, udp通讯,唯独将ftp给漏掉了, 在Qt5之前也就是qt4是有QFTP这个类可以直接使用的,但是在Qt5以后,这个类就被官方给删除了,所以后面采用Ftp都是基于QNetworkAccessManager访问的,使用这个类不能设置ftp独有的命令来操作,所以我自己基于QTcpSocket开发了一套基于多线程的Ftp断点续传下载上传功能,可以创建目录,切换路径,实现各种复杂的ftp命令交互,已经上传到git上面好久了,最近想起来了,就想着补充一篇本博客,提供免费下载使用,是公开原创 2021-11-07 09:39:57 · 727 阅读 · 0 评论 -
Qt系列文章013-TCP通信
1 前言 在前面讲完Qt的辅助网络请求类后,今天开始正式进入实践常用的网络通信方式——TCP通信, 这章主要讲解TCP通信的含义和Qt相关的Tcp类库详解,具体实践程序设计讲解放到下一章,本章主打基础知识讲解!2 TCP概述 TCP(Transmission Control Protocol) 是一种 被大多数Internet网络协议(如HTTP和FTP)用于数据传输的低级网络协议,它是可靠的、面向流、面向连接的传输协议,特别适合用于连续数据传输。 TCP通信必须先建立TCP连接,通信端分为客原创 2021-11-07 09:13:37 · 604 阅读 · 0 评论 -
Qt系列文章006-Qt元对象介绍
1 前言 Qt是一个用标准C++编写的跨平台开发类库,它对标准C++进行了扩展,引入了元对象系统、信号与槽、属性等特性,使应用程序的开发变得更高效。本章将开始介绍Qt的这些核心特点,对于理解和编写高效的QtC++程序是大有帮助的。 本章还介绍 <QtGlobal>头文件 中Qt的一些全局定义,包括数据类型、函数和宏等,介绍Qt的容器类及其相应迭代器的使用方法。这些全局定义和容器类在程序中经常用到,了解其原理便于理解后面遇到的一些实例程序。2 正文概述 这里啰嗦一下,这边的概述讲述的原创 2021-11-06 13:40:09 · 822 阅读 · 1 评论 -
Qt系列文章036-自定义Qt Designer插件
1 前言 上节讲了如何自定义一个QWidget组件,然后提升为QWidget控件来使用,本节将讲解如何自定义一个插件,直接拖放,而插件时基于组件形成的,所以前面的知识是必须要掌握滴~2 创建Qt Designer Widget插件项目 Qt提供两种设计插件的API,可以用于扩展Qt的功能。高级(high-level) API用于设计插件以扩展Qt的功能,例如 定制数据库驱动、图像格式、文本编码、定制样式 等,Qt Creator 里大量采用了插件,单击Qt Creator的主菜单栏的 Help→A原创 2022-02-18 16:00:12 · 2558 阅读 · 0 评论 -
Qt系列文章010-Qt容器类介绍
1 前言 前面已经详细阐述了Qt 中QtGlobal 包含的常用数据类型和方法还有一些宏定义,因为篇幅的问题,所以做了上下两章来讲。方便各位消化和耐看!那么今天这章主要就是讲解Qt 独有的迭代器使用了! 话说使用迭代器必定少不了容器,没有容器,迭代器就无法现行,所有下面我们从容器开始入手,先将Qt的容器过一遍眼,然后详细讲解各种容器的迭代器使用方式!2 容器类2.1 容器类概述 Qt提供了多个基于模板 的容器类,这些容器类可以用于存储指定类型的数据项,例如常用的字符串列表类 QStr原创 2021-11-06 14:00:25 · 844 阅读 · 0 评论 -
Qt系列文章003-第一个项目
通常来说,入门的时候写的第一个程序都是 hello world,这可能是几十年来沿袭下来的风格习惯,包括大量的教材教科书都是用这个举例,当然你也可以改成 hello Qt,hello c++ 之类的,如果是中文开发环境估计还有 你好,世界。1 新建一个项目单击Qt Creator的菜单项文件(File)→新建文件或项目(New File or Project) 或者在主面板点击New菜单按钮,点击确定之后出现如下对话框。在这个对话框里选择需要创建的项目或文件的模板。Qt Creator可以创建多种项原创 2021-11-06 13:31:50 · 856 阅读 · 2 评论 -
Qt系列文章027-QAudioInput音频输入
1 前言 前面讲解了音频的录入和音频文件的播放,本章将会继续讲解音频输入的获取图形显示,下面看基本功能概述,先看效果图2 效果图 这里波形段保持一个序列,是我这边输入的问题,插上的耳机,有点问题,所以没有什么波段显示,3 QAudioInput获取音频输入功能概述 QAudioInput 类提供了接收音频设备输入数据的接口,创建QAudioInput 对象实例时,需要用两个参数,一个是 QAudioDeviceInfo 类表示的音频设备,一个是 QAudioFormat 表示的音频输入格式原创 2021-11-09 08:39:55 · 2462 阅读 · 0 评论 -
Qt系列文章017-UDP单播广播
1 前言 在前面讲解了UDP的基本概念后,还是要通过实例代码来全新过一遍才是真正的走通,实践出真知嘛,所以下面会用一个实例来分别讲解单播、广播、组播的区别和特点,其实,一般用UDP也就是单播用的对,不过多了解必有用处!2 UDP通信实例程序功能 老规矩,先新建一个UDP项目,如下图: 项目名称就设为UDP,点击下一步生成项目,设计简单的界面构造,运行实例如下: 实例程序UDP 实现单播、广播、组播功能,其主窗口是继承自QWidget的类,界面用UI设计器设计。程序可以进原创 2021-11-07 09:23:00 · 426 阅读 · 0 评论 -
Qt系列文章002-开发环境搭建
由于Qt自带了mingw的环境,基本上是一步到位的,下面着重介绍的是msvc版本的Qt和安卓开发环境搭建。图文并茂。1 开始搭建1.1 Qt MSVC环境搭建很多小伙伴在安装好Qt MSVC后发现还不能正常的如Mingw那样直接写程序来编译运行,因为会报错,可能启动的时候就会提示错误,不管报什么错请按照我下面的步骤一步一步来,绝对好用!安装Visual Studio 2019版,最新版本(不想安装的可以忽略)为什么要安装Vs呢?因为安装它的好处是可以在VS里面调试Qt程序,Vs的调试能力要比Q原创 2021-11-06 13:23:35 · 933 阅读 · 2 评论 -
Qt系列文章030-QThread多线程
1 前言 终于算是写到一个比较核心的功能了,对于一个项目,多线程是必不可少的,当然有的也不需要,不是说做项目就一定要使用多线程,不过一般复杂点的项目,多线程是必不可少的,所以从本章开始,将详解Qt多线程应用,以及pthread的应用详解,C++11多线程等都会涉及,不过还是以Qt中的QThread为主,下面讲解QThread的概念。2 概念讲解 一个应用程序一般只有一个线程,一个线程内的操作是顺序执行的,如果有某个比较消耗时间的计算或操作,比如网络通信中的文件传输,在一个线程内操作时,用户界面就可原创 2021-11-09 08:45:01 · 932 阅读 · 0 评论 -
Qt系列文章009-Qt数据类型介绍
1 前言 这一章主要介绍Qt包含的数据类型和迭代器,C/C++有自己的的标准类型和迭代器,Qt也有它自身包装的独特类型如qint8、qint64等和相关Qt包装实用的迭代器,究竟如何使用呢?我们先从QtGlobal 这个头文件开始入手2 QtGlobal介绍 <QtGlobal> 头文件包含基本的全局声明(包括基本数据类型、函数和宏)。并且它包含在大多数其他Qt头文件中,所以不用显式包含这个头文件也可以使用其中的定义。2.1 QtGlobal包含的数据类型定义 为了确保在原创 2021-11-06 13:50:16 · 1222 阅读 · 0 评论 -
Qt系列文章011-Qt模块介绍
1 前言 Qt的模块相当多,不去分类看,可以看得眼花缭乱,不知道从何处开始看起,仔细分类后其实有没有多少,一共可以分为四个大模块和1个工具库,有兴趣了解更多的可以自己去Qt官方文档中搜索 All Modules 关键词,就一目了然了,好了,下面我开始逐步详细讲解每个大模块的作用和它包含的小模块的含义。上菜!2 Qt 类库的模块分类介绍 Qt类库里大量的类根据功能分为各种模块,这些模块又分为几大类:Qt基本模块(Qt Essentials): 提供了Qt在所有平台上的基本功能。Qt附加模块(原创 2021-11-06 14:03:04 · 1015 阅读 · 0 评论 -
Qt系列文章004-Qt+VS开发环境搭建
1 前言在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原创 2021-11-06 13:35:08 · 1097 阅读 · 2 评论 -
Qt系列文章031-QThread线程同步
1 前言 前面讲解了相关QThread的使用和同步概念,本节将着重讲解QThread同步的具体使用,下面将从 QMutex和QMutexLocker 展开讲解!2 QMutex详解 QMutex 和 QMutexLocker 是基于互斥量的线程同步类,QMutex 定义的实例是一个互斥量,QMutex主要提供3个函数。lock(): 锁定互斥量,如果另外一个线程锁定了这个互斥量,它将阻塞执行直到其他线程解锁这个互斥量。unlock(): 解锁-一个互斥量,需要与lock()配对使用。tr原创 2022-02-18 15:28:57 · 837 阅读 · 0 评论 -
Qt系列文章014-TCP服务器
1 前言 前文主要是介绍了关于QTcpServer(服务端)和 QTcpSocket(客户端) 的一些 基本核心类 ,以及TCP协议 相关的概念理论,本章将接着上文通过实战代码讲解,一步一步讲解TCP服务端和客户端的交互通信和搭建,正所谓代码入手,简单直接,高效通用!2 新建项目 首先新建一个新工程。如下图: 取名TcpServer, 下一步之类操作不累赘,新建工程完毕后,我们开始简单的界面搭建,运行效果图如下:3 程序函数介绍 TcpServer是一个窗口基于 QW原创 2021-11-07 09:15:45 · 407 阅读 · 0 评论 -
Qt系列文章021-HTTP文件上传
1 前言 在前面写完HTTP相关下载后,上传肯定也是少不了的,虽然平时我们上传用的少,但是也是一个不可或缺的功能,所以今天打算简单的讲讲Qt相关的Http上传功能。2 上传接口 有了前面的关于Qt网络的基础类的了解,下面的介绍大家肯定会一点就通!当然我们的上传同样是基于 QNetworkAccessManager 开发的, 大家可以回忆下在前面下载的章节中我们用到的是Get,如下:QNetworkReply *QNetworkAccessManager::get(const QNetwo原创 2021-11-07 09:34:05 · 1717 阅读 · 1 评论 -
Qt系列文章018-UDP组播
1 前言 上文因为篇幅和组播特性的问题,我只写了单播和广播的实例程序,所以这篇主打UDP组播的程序实现和相关讲解。2 组播的特性 在上一篇文章中,给出了组播示意图,简单表示了组播的原理。UDP组播是主机之间 一对一组 的通信模式,当多个客户端加入由一个组播地址定义的多播组之后,客户端向组播地址和端口发送的UDP数据报,组内成员都可以接收到,其功能类似于QQ群。 组播报文的目的地址使用D类IP地址,D类地址不能出现在IP报文的源IP地址字段。用同一个IP多播地址接收多播数据报的所有主机构原创 2021-11-07 09:25:18 · 1253 阅读 · 0 评论 -
Qt系列文章024-多媒体模块介绍
1 前言 说完网络编程后,现在也应该来到媒体库的使用了,一般媒体库会结合网络编程使用,比如从网上拉取音频/视频数据,然后通过媒体库来进行播放,编码,压缩等相关功能,而Qt已经内置好了这些相关的媒体库,一般需求都用的到,除非需求很特殊就推荐自己编译一些第三方的媒体库,例如FFmpeg 库,或者使用基于FFmpeg的现成VLC第三方播放器等,好了,废话不多说,进入正题,首先介绍Qt媒体库有哪些花样,是什么形态的,又如何使用了?本章只做概念介绍,具体实例代码等均在后节,所以本节篇幅较短2 Qt多媒体模块原创 2021-11-09 08:34:16 · 804 阅读 · 0 评论 -
Qt系列文章034-从pthread 到QThread
1 前言 今天想记录一下 Linux上的线程开发以及Qt对线程的封装(Linux平台部分)。 所以内容会偏向理论部分,而今天要记录的这篇文章,也是我从网上看了以后,觉得很有必要记录一番,非常的有理论意义和深入线程的探索挖掘!好了,直接进入枯燥的理论主题吧!2 正文 首先Linux上的线程API使用的是pthread库,所有我们来粗略认识下 pthread。 要在程序中使用pthread线程,究竟会用到哪几部分的功能呢?创建线程是必须的吧,pthread_create();设置线程的属性也原创 2022-02-18 15:39:11 · 1635 阅读 · 0 评论 -
Qt系列文章019-HTTP下载
1 前言 前面讲解了主流的TCP/UDP请求后,该到用处最多的HTTP请求了,在Qt中要使用HTTP请求,在Qt4的时候有专门的QHttp,QFtp类使用,可惜在Qt5已经全部干掉了,统一封装了接口QNetworkAccessManager ,下面主要就是围绕该类展开一个系统性的介绍和使用!玩转此类,Qt5的网络请求基本就不在话下了! 这里提前放一个动态示意图,可以让读者再开始之前知道是怎么一回事2 Qt高层网络操作类介绍 Qt网络模块提供–些类实现OSI7层网络模型中高层的网络协议,如H原创 2021-11-07 09:27:26 · 480 阅读 · 0 评论 -
Qt系列文章028-基于QMediaPlayer视频播放
1 前言前面讲解了 QMediaPlayer 播放音频文件,但是视频文件播放器一直没去讲,本章将会详细讲解如何播放视频的程序开发。2 播放概述使用 QMediaPlayer 可以进行视频文件解码,视频播放必须将视频帧在某个界面组件上显示,有 QVideoWidget 和 QGraphicsVideoItem 两种视频显示组件,也可以从这两个类继承,自定义视频显示组件。QMediaPlayer 也可以结合 QMediaPlaylist 实现视频文件列表播放。3 在QVideoWidget上播放视频原创 2021-11-09 08:42:25 · 2249 阅读 · 0 评论 -
Qt系列文章001-Qt下载安装
1 Qt下载这边只介绍具体的下载地址,本文也是以Qt5.x系列为主,其他版本不涉及,因为Qt目前的大版本是5.x系列,最新版本最近刚更新到5.15。Qt6 于2020年年底发布,预览版已经出了,我尝试用过,体验还是不太好,因为要更改的东西太多了,删除了很多库,尤其是Qt5中qml使用的库,目前使用比较多的版本应该是5.12.x,5.13.x和5.14.x等几代版本。我会以Qt 5.12.x 系列版本为例开讲, 最新的发布的版本是Qt5.12.10 ,下面附上几个下载链接1.1 Qt官网下载地址Qt官网原创 2021-11-06 12:20:46 · 1882 阅读 · 4 评论 -
Qt系列文章005-开发工具QtCreator
1 前言QtCreator在设计界面或编辑代码时,有–些快捷键和使用技巧,熟悉这些快捷键和使用技巧,可以提高工作效率。下表记录了一些Qt Creator 常用的相关快捷操作以及总结。2 快捷键表单功能快捷键说明Switch Header/SourceF4在同名的头文件和源程序文件之间切换Follow Symbol Under CursorF2跟踪光标下的符号,若是变量,可跟踪到变量声明的地方:若是函数体或函数声明,可在两者之间切换Switch Between原创 2021-11-06 13:36:50 · 679 阅读 · 1 评论 -
Qt系列文章035-自定义组件
1 前言 当UI设计器提供的界面组件不满足实际设计需求时,可以从QWidget继承自定义界面组件。有两种方法使用自定义界面组件,一种 是提升法( promotion),例如前面有一个demo中QGraphicsView组件提升为自定义的QWGraphicsView类,提升法用于界面可视化设计时不够直观,不能在界面上即刻显示自定义组件的效果;另一种是为UI设计器设计自定义界面组件的Widget插件,直接安装到UI设计器的组件面板里,如同Qt自带的界面设计组件一样使用,在设计时就能看到组件的实际显示效果,只原创 2022-02-18 15:40:49 · 1695 阅读 · 0 评论 -
Qt系列文章015-TCP客户端
1 前言 上一章主要讲述了服务端的程序设计,本章主要讲述客户端的程序设计和对应的通信交互,有了前面的基础,基本上下面的讲解,我想已经非常容易理解了!2 客户端项目新建 还是老样子,先新建一个客户端的程序项目,如下图: 取名为TCPClient项目名称!新建工程完毕后,我们开始简单的界面设计,运行效果图如下: 客户端程序TCPClient只需要使用一个 QTcpSocket 对象,就可以和服务器端程序TcpServer 进行通信。 TCPClient也是一个窗口基原创 2021-11-07 09:18:22 · 404 阅读 · 0 评论 -
Qt系列文章025-使用QMediaPlayer开发播放器
1 前言 前面讲完了多媒体的概念功能,本章将进行实例程序的讲解分析,带入快速集成项目使用,还是先介绍下该类的用途和主要成员,首先QMediaPlayer可以播放经过压缩的音频或视频文件,如mp3、mp4、wmv等文件, QMediaPlayer可以播放单个文件,也可以和 QMediaPlaylist 类结合,对一个播放列表进行播放。所以使用QMediaPlayer和QMediaPlaylist可以轻松地设计一个自己的音乐或视频播放器, 先来看下效果:2 效果图下面的播放歌曲没有对应处理,整体功原创 2021-11-09 08:36:01 · 1490 阅读 · 0 评论 -
Qt系列文章033-QThread信号量线程同步
1 前言 本章将是QThread中最后一个有关同步的方法介绍了,可能很少有人会用到使用信号量,不过了解该机制也是不错的,下面看我的简单实例使用介绍。2 信号量的原理 信号量(Semaphore)是另一种限制对共享资源进行访问的线程同步机制,它与互斥量(Mutex)相似,但是有区别。一个互斥量只能被锁定一次,而信号量可以多次使用。信号量通常用来保护一定数量的相同的资源,如数据采集时的双缓冲区。 QSemaphore 是实现信号量功能的类,它提供以下几个基本的函数:acquire(int n)原创 2022-02-18 15:33:33 · 1144 阅读 · 0 评论 -
Qt系列文章032-QReadWriteLock和QWaitCondition线程同步
1 前言 上一节讲解了QMutex的同步使用,今天本节将讲解 QReadWriteLock和QWaitCondition 线程同步的使用以及相关概念知识2 QReadWriteLock使用 上文使用互斥量时存在一个问题: 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。而实际上若只是读取一个变量,是可以让多个线程同时访问的,这样互斥量就会降低程序的性能。 假设有一个数据采集程序,一个线程负责采集数据到缓冲区,一个线程负责读取缓冲区的数据并显示原创 2022-02-18 15:31:30 · 507 阅读 · 0 评论 -
QtCreator中pro项目文件格式说明
名称说明QT += core gui添加本项目中需要的模块,影响后面代码文件include的时候自动弹出下拉选择,如果pro文件没有引入该模块则无法自动语法提示,一般打包发布的时候对应动态库文件比如 Qt5Core.dll。TARGET = xxx生成最后目标文件的名字,可以是可执行文件或者库文件。TEMPLATE = app项目程序的生成模式,默认是app表示生成可执行文件程序,如果是动态库项目就是 TEMPLATE = lib。CONFIG += qaxcon...原创 2022-03-23 10:11:28 · 5344 阅读 · 4 评论 -
关于Qt中的qss样式表需要注意的坑
qss源自css,相当于css的一个子集,主要支持的是css2标准,很多网上的css3的标准的写法在qss这里是不生效的,所以不要大惊小怪。qss也不是完全支持所有的css2,比如text-align官方文档就有说明,只支持 QPushButton and QProgressBar,务必看清楚。有时候偷懒直接来一句 *{xxx},你会发现大部分是应用了,也有小部分或者极个别没有应用,你可能需要在对应的窗体中 this->setStyleSheet() 来设置。qss的执行是有优先级的,如果没有.原创 2022-03-02 16:39:24 · 2758 阅读 · 7 评论