自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不会飞的纸飞机的博客

一个编程小白的编程学习总结

  • 博客(120)
  • 收藏
  • 关注

原创 个人技术文章汇总

个人博客主页:不会飞的纸飞机微信公众号:不会飞的纸飞机 (利用片段时间提升自己,还有轻松搞笑的段子每日推送)下面是我写的技术性文章汇总,持续更新中。。。文章目录1. C++技术(C++基础/C++11/STL)2. Qt开发之路3. 多线程与Qt4. Python入门笔记5. 其他1. C++技术(C++基础/C++11/STL)C++ 基础系列C++中的虚表C++中的虚析构...

2020-02-09 18:40:17 3553

翻译 COM编程入门Part Ⅰ- 什么是COM和如何使用COM [译]

本篇文章为翻译文章,适合像我一样,之前从来没有接触过COM编程的人,如果翻译的有什么不足之处,希望大家多多指出。原文链接:https://www.codeproject.com/Articles/633/Introduction-to-COM-What-It-Is-and-How-to-Use-It以下为译文部分:文章目录本文的目的介绍COM到底是什么?基本元素的定义使用COM对象创建COM对象删除一个COM对象基本接口 - IUnknown密切关注 - 字符串处理WideCharToMultiBy

2020-11-30 17:23:19 16

原创 基于QGraphicsView的简易画板EasyCanvas -- 第二版

EasyCanvas 第二版,第一版的功能可参见:基于QGraphicsView的简易画板EasyCanvas – 第一版第二版 在第一版的基础上增加如下功能:节点树撤销/重做Python脚本动态修改节点属性方案管理1. 节点树具有同步选择节点、删除节点、节点重命名和搜索的功能。节点树使用Qt的Model-View框架实现2. 撤销/重做(Redo/Undo)使用Qt的 QUndoCommand 和 QUndoStack 的实现。快捷键 Ctrl+Z 撤销,Ctrl+Y 重做

2020-09-05 18:30:14 367 4

原创 Qt与OpenGL编程 - IBO与线框模式

文章目录1. 索引缓冲对象(IBO)(1) 创建IBO(2)设置IBO的数据(3)绘制2. 线框模式1. 索引缓冲对象(IBO)索引缓冲对象(Element Buffer Object, EBO,也叫Index Buffer Object, IBO)。假设我们要绘制得不是三角形,而是四边形,那么我们要写生成得节点组合可能是这样的:GLfloat vertices[] = { // 第一个三角形 0.5f, 0.5f, 0.0f, // 右上角 0.5f, -0.5f, 0

2020-08-08 20:48:28 120

原创 Qt与OpenGL编程 - Hello三角形
原力计划

OpenGL是一个跨平台的GPU渲染库,Qt对OpenGL做了一部分的封装,可以使我们更加方便的使用OpenGL。关于OpenGL更多的相关学习内容可以参考(比较全和详细的OpenGL教程):LearnOpenglcn文章目录1. 渲染管线2. 标准化设备坐标3. 关于QOpenGLWidget4. VBO(1)创建VBO。(2)为VBO设置顶点属性数据(3)链接顶点属性5. 编写着色器(Shader)(1) 顶点着色器(Vertex Shader)(2)片段着色器(Fragment Shader)(

2020-07-11 19:33:20 187

原创 使用QGraphicsBlurEffect实现图片背景模糊效果

先看一下实现效果:类 QGraphicsBlurEffect 可以实现图像的模糊效果,它的相关接口主要有如下两个:void setBlurHints(QGraphicsBlurEffect::BlurHints hints)void setBlurRadius(qreal blurRadius)setBlurHints 是设置模糊质量的函数,它的参数有如下几种:PerformanceHint 表明渲染性能是最重要的因素,但可能会降低渲染质量。(默认参数)QualityHint 表明渲染

2020-06-25 14:37:50 354 8

原创 MySQL数据库学习笔记(10)- distinct与in和exists子查询

1. distinct的使用distinct 用于在查询中返回列的唯一不同值(去重复),支持单列或多列。(只能写在SELECT的后面)比如,我们想获取员工表中所有的部门,可以将SQL语句写成如下:SELECT DISTINCT department FROM employee;2. 子查询in如果运算符 in 后面的值是来源于某个查询结果,并非是指定的几个值,这是就需要用到子查询。子查询又称为内部查询或嵌套查询,即在SQL查询的WHERE子句中嵌入查询语句。它的基本形式如下:SELECT c

2020-06-23 06:34:19 102

原创 MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)
原力计划

表连接(JOIN)是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表直接获取数据。在介绍表连接之前,首先介绍一下外键1. 外键(foreign key)外键(foreign key) 为某个表中的一列,它包含另一个表的主键。...

2020-06-21 22:55:22 69

原创 MySQL数据库学习笔记(8)- DQL之分组数据

文章目录1. 分组的基本使用2. 分组过滤3. group_concat的使用MySQL中使用 group by 对数据进行分组。它必须配合聚合函数进行使用,对数据进行分组后可以执行 count 、 sum 、 avg 、 max 和 min 等操作。1. 分组的基本使用下面是一个简单的示例,将员工表 employee 按照部门 department 进行分组,统计各个部门的人数。完整的表中数据如下:使用如下语句对数据进行分组:SELECT department, Count(*) FRO

2020-06-13 17:43:52 71

原创 使用FFMpeg API 获取摄像头的图像数据
原力计划

文章目录1. 获取摄像头的信息2. 打开并初始化摄像头3. 获取摄像头数据及渲染摄像头是我们比较常用的外设,很多场景我们都会用到摄像头。比如视频直播、视频监控等各个领域都会用到摄像头。摄像头图像数据的获取,方法有很多,比如可以使用Qt自带的API获取,也可以使用DirectShow、OpenCV、FFMpeg提供的API方式获取(本质上是通过DirectShow)。本篇文章主要讲述使用FFMpeg API获取摄像头的数据信息。下面是一个简单的摄像头显示的例子的实现效果:使用FFMpeg获取摄像头的

2020-05-25 01:00:26 372

原创 MySQL数据库学习笔记(7)- DQL之内置函数

MySQL中的内置函数通常包括下面几种, 文本处理函数 、 日期与时间处理函数 、 数值处理函数 、 聚合函数 、条件判断函数 等。这些函数可以帮助用户方便的处理表中的数据,简化用户操作。1. 文本处理函数函数说明Left()返回字符串左边的字符Length()返回字符串的长度Locate()找出字符串的一个子串Lower()将字符串转换为小写LTrim()去掉字符串左边的空格Right()返回字符串右边的字符RTrim()去掉字符串

2020-05-23 21:54:25 100

原创 MySQL数据库学习笔记(6)- DQL之IN、LIKE、查询结果排序与分页

文章目录1. IN2. LIKE3. 排序4. 分页1. IN运算符 IN 允许我们在 WHERE 子句中过滤某个字段的多个值。它的基本形式如下:SELECT [列名1, 列名2, ...] FROM 表名 WHERE 字段名 IN(值1, 值2, ...)下面是一个简单的示例,找到ID为2,3,4,9的记录SELECT * FROM employee WHERE id IN (2, 3, 4, 9);结果如下:2. LIKE当我们需要查询 包含 xxxx 的所有记录时,就需要使用

2020-05-20 00:16:24 80

原创 MySQL数据库学习笔记(5)- DQL之简单查询与条件查询

文章目录1. 简单查询语句2. 条件查询语句1. 简单查询语句MySQL中使用 select 语句进行数据的查询,它的一般形式如下:SELECT column_name1, column_name2 FROM table_name [WHERE where_condition][GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]] [HAVING where_condition][ORDER BY {col_name | exp

2020-05-19 23:30:49 155

原创 MySQL数据库学习笔记(4)- DML之数据的插入、修改和删除

1. 数据的插入MySQL中向数据库中插入数据,使用 INSERT INTO 语句插入单条语句INSERT INTO 表名 (field1, field2, ..., fieldN) VALUES (value1, value2, ..., valueN);下面是向一个数据表中插入数据的简单例子这里有一张person表,里面有三列,具体形式如下:INSERT INTO person (name, id_number) VALUES('不会飞的纸飞机', '2222111144445555

2020-05-18 06:25:24 92

原创 MySQL数据库学习笔记(3)- DDL之数据表的创建、删除及修改

文章目录1. MySQL的存储引擎2. MySQL的数据类型3. MySQL数据表的创建、删除和修改1. MySQL的存储引擎存储引擎 就是如何存储数据、如何更新数据、如何查询数据、如何为存储的数据建立索引等一系列技术的实现方法。使用如下语句查询MySQL的存储引擎SHOW ENGINES;下面是关于MySQL存储引擎的简单介绍:存储引擎描述MyISAM拥有较快的插入、查询速度,但不持支事务InnoDB支持ACID事务,支持行级锁,支持外键;MySQL5.5版本

2020-05-14 00:57:27 157

原创 MySQL数据库学习笔记(2)- DDL之数据库的创建和删除

1. 查看所有的数据库SHOW DATABASES;结果如下:其中数据库 information_schema 、 mysql 、 performance_schema 、 sys 为MySQL的系统自带数据库。他们的主要作用如下:information_schema : 提供访问数据库元数据的方式。( 元数据 是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时用于表述该信息的其他术语包括“数据词典”和“系统目录”。)mysql : mysql的核心数据库,类似于sql

2020-05-11 23:41:55 111

原创 MySQL数据库学习笔记(1)- 数据库基本概念

文章目录1. 数据库的基本概念和分类(1) 什么是数据库(2) 数据库的分类(3) 数据库管理系统(4) RDBMS介绍(5) 主流的RDBMS2. SQL简介及分类(1) SQL简介(2) SQL语言的分类3. 数据库的连接(1) 服务的启停(2) 连接MySQL服务1. 数据库的基本概念和分类(1) 什么是数据库数据库 是按照数据结构来组织、存储和管理数据的仓库。数据库是长期存储在计算机内、有组织、可共享的、统一管理的大量数据的集合。数据库中数据按一定的数据模型组织、描述和存储,具有较小的冗余

2020-05-10 23:05:47 94

原创 使用PythonQt实现C++与Python混合编程
原力计划

PythonQt提供了一种将python脚本语言嵌入到Qt C++程序中的简单方法。我们可以使用一种脚本语言,扩展我们的应用,Qt中对于脚本化扩展应用程序有两种方法使用JavaScript扩展。可以参考我的上一篇文章,使用Qt QJSEngine实现JavaScript与C++混合编程使用Python扩展。很多知名的软件都是用python脚本的方式,扩展自己的应用程序:Blende...

2020-04-19 00:12:51 570 2

原创 使用Qt QJSEngine实现JavaScript与C++混合编程
原力计划

QJSEngine实现了一个Qt中JavaScript的运行环境,使用的是Chrome的V8引擎。下面介绍一下QJSEngine的简单使用。文章目录1. 执行JavaScript的代码2. 脚本异常3. JavaScript中调用C++(1)添加全局对象属性(2)添加类对象属性(3)添加类属性1. 执行JavaScript的代码使用函数 evaluate 实现执行一个JavaScript...

2020-04-07 22:32:13 713

原创 基于QGraphicsView的简易画板EasyCanvas -- 第一版

最近使用 QGraphicsView 做了个简易的画板 EasyCanvas ,界面效果如下:具有如下功能:画布设置图元添加和修改保存为图片1. 画布设置可以通过右侧画布属性,设置画布的尺寸和背景颜色2. 图元设置可以添加、修改、删除图元,通过鼠标拖拽的,选择、平移和旋转关于平移、改变尺寸和旋转可以参照这上一篇文章:自定义QGraphicsItem实现平移、改变尺寸和...

2020-03-30 22:52:58 1466 6

原创 自定义QGraphicsItem实现平移、改变尺寸和旋转
原力计划

文章目录1. 平移2. 改变尺寸3. 旋转我们在使用QGraphicsView框架的时候,经常需要自定义QGraphicsItem,并且需要实现Item的平移、改变大小和旋转的效果。接下来介绍他们的一种实现方式1. 平移平移效果如下图所示:实现方式有两种方法:使用QGraphicsItem本身的移动标志实现。this->setFlag(QGraphicsItem::Ite...

2020-03-21 22:34:02 2114 3

原创 QtConcurrent多线程 - map、mapped和mappedReduced

文章目录1. map 和 mapped2. mappedReduced3. 其他扩展Qt中的 Concurrent 模块为我们提供了在一个序列容器类型针对每一个元素的多线程并行运算,比如 QList 、 QVector 。QtConcurrent::map() :对序列的每一项元素都应用一个函数,并将运算结果替换原来的元素。QtConcurrent::mapped() :功能类似 ma...

2020-03-09 22:32:10 810

原创 使用QWaitCondition实现一个简单的线程池

上篇文章主要讲了线程池的使用Qt中的线程池QThreadPool本篇文章使用Qt的条件变量 QWaitCondition ,实现一个简单的线程池关于 QWaitCondition 的使用,可以参照 线程的互斥和同步(7)- Qt的条件变量QWaitCondition先来说一下简单的思路,线程池初始化时创建一定数量的线程(8个) ,所有的线程处于挂起状态。当任务添加到列表时,唤醒一个线程执...

2020-03-06 22:21:45 233

原创 QtConcurrent多线程 - run()与QFuture

文章目录1. run()函数2. QFuture3. QFutureWatcherQt中的 Concurrent 模块,为我们提供高级的(high-level)API 编写多线程程序,而不用使用低级的(low-level)线程元语(如互斥锁、读写锁、信号量、条件变量等)。使用的时候需要在.pro文件中添加 concurrent 模块QT += concurrent我们首先来介绍一下 Q...

2020-03-06 00:10:25 1023

原创 线程的互斥和同步(9)- Qt中的读写锁QReadWriteLock

Qt中提供了 QReadWriteLock 类,我们可以方便的使用读写锁。读写锁 是指 读锁 和 写锁 。适用于多个线程读操作比较频繁,而写操作不频繁的场景中。它能够保证多个线程读操作访问资源时同时进行,而写入操作时阻塞读操作。也就是我们常说的,读共享 和 写独占 。1. 读共享和写独占读共享 :当其他线程占用读锁的时候,如果其他线程请求读锁,会立即获得。当其他线程占用读锁的时候,...

2020-02-27 21:27:09 345

原创 Qt中的线程池QThreadPool

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永...

2020-02-26 22:50:41 1250

原创 线程的互斥和同步(8)- C++11中的互斥锁和条件变量

文章目录1. 互斥锁(1) 递归锁和非递归锁(2) 互斥锁管理类2. std::condition_variable1. 互斥锁之前讲过使用Windows的API和Qt中如何创建和使用互斥锁。接下来,主要说明一下C++11中的互斥锁。c++11中的互斥锁主要有如下几种:互斥锁说明mutex最基本的互斥锁,不可重入timed_mutex具有超时机制的互斥锁...

2020-02-23 20:34:46 150

原创 线程的互斥和同步(7)- Qt的条件变量QWaitCondition

QWaitCondition 提供了一个用于同步线程的条件变量。它允许一个线程后告诉其他的线程已经满足了某种条件;一个或多个线程可以阻塞等待 QWaitCondition 来使用 wakeOne() 或 wakeAll() 设置条件。使用 wakeOne() 唤醒一个随机选择的线程或者 wakeAll() 唤醒全部等待的线程。下面是 QWaitCondition 类中,常用的函数介绍:bo...

2020-02-23 13:09:54 344

原创 线程的互斥和同步(6)- Qt的信号量QSemaphore

上一篇文章主要介绍了使用Windows API创建和使用信号量Semaphore线程的互斥和同步(5)- Windows的信号量Semaphore本篇文章只要介绍Qt的信号量 QSemaphore 类的使用,并用一个 生产者-消费者 实例来说明信号量是如何提高多线程的效率的。下面是使用类 QSemaphore 常用的函数:void acquire (int n = 1); 表示请求n...

2020-02-20 20:59:10 446

原创 线程的互斥和同步(5)- Windows的信号量Semaphore

信号量也是进程间同步常用的手段之一。举个例子,比如我们要去餐馆吃饭,这家餐馆一共有4个位置,我们一共是6个人。那么就会4个人先去吃饭,等他们吃完了,剩下的2个人再去吃饭,如果再来人则需要判断是否有空位置,如果有直接坐下吃饭,如果没有则需要等待。这里的每一个顾客就相当于一个线程,而通知你排队叫号进餐的那个服务员就是我们的信号量。信号量可以有效的保证我们多个线程并发执行。对于信号量,我们经常使用的...

2020-02-19 21:31:38 152

原创 线程的互斥和同步(4)- Qt中的互斥锁(QMutex和QMutexLocker)

上一篇文章主要介绍了Windows的互斥锁线程的互斥和同步(3)- Windows的互斥锁Linux也有自己API来操作互斥锁,对于跨平台的操作,Qt帮助我们使用一套代码实现相同的效果。Qt中使用类 QMutex 和 QMutexLocker 来实现和管理互斥锁。类 QMutex 的主要函数有:lock (); 加锁,如果该互斥锁被占用,该函数阻塞,直到互斥锁被释放。u...

2020-02-17 21:30:35 448

原创 线程的互斥和同步(3)- Windows的互斥锁

什么是互斥锁/互斥量?在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象;选自百度百科-互斥锁。同一时刻只有一个线程访问互斥锁,如果其他线程请求占用该互斥锁时,该请求锁的线程会被挂起。直到锁的拥有者释放该互斥锁,CPU调度到请求锁的线程占有该互斥锁,该线程被唤醒。Windows中...

2020-02-17 00:06:09 243

原创 Qt绘制文字轮廓

首先看一下使用Qt绘制文字轮廓效果:这里使用 QPainter 中的 strokePath 函数实现文字轮廓的绘制。void QPainter::strokePath(const QPainterPath &path, const QPen &pen)函数 strokePath 表示使用pen绘制一个路径的轮廓。Draws the outline (strokes) t...

2020-02-15 22:07:32 263

原创 线程的互斥和同步(2)- Windows的临界区

临界区是指程序中的多个线程访问同一个受保护的代码段,临界区的代码段同一时刻只允许一个线程执行。使用临界区对象 CriticalSection ,来实现对临界区的操作。下面是一些过于临界区操作的主要函数:InitializeCriticalSection (LPCRITICAL_SECTION lpCriticalSection); 初始化临界区对象DeleteCriticalSecti...

2020-02-09 16:23:28 290

原创 Qt自定义ColorDialog(支持RGB和HSV)

文章目录1. HSV和RGB2. H分量圆盘绘制3. SV画布绘制当我们做软件开发的时候,经常需要编辑颜色,有时需要同时编辑RGB和HSV的颜色。这是一个自定义的颜色对话框,如下图所示具有如下功能:支持RGB和HSV颜色值得修改和预览支持添加自定义颜色(点击按钮添加或鼠标拖拽添加)修改颜色效果预览:添加自定义颜色效果预览:颜色控件效果预览:下面是主要用到得技术点说...

2020-02-08 17:51:02 854 3

原创 基于Qt的简易Http下载软件

文章目录1. 发送head请求获取文件大小信息2. 发送获取部分文件请求3. 设置代理一个简单的Http下载软件,支持 断点续传 ,文件下载完成后可直接预览,不过下载速度一般(每次请求大约10K的数据量,也没有使用短线成切片下载)下面的效果截图:完整效果演示:这里主要使用了使用了类 QNetworkAccessManager 、 QNetworkRequest 和 QNetworkRe...

2020-02-07 16:55:11 704

原创 线程的互斥和同步(1)- 原子操作与自旋锁

文章目录1. 使用Windows API实现原子操作2. 使用C++11提供的原子对象实现原子操作3. 使用atmoic_flag实现自旋锁在进行多线程编成的时候,我们经常会遇到线程的互斥与同步问题。比如多个线程访问同一个变量,需要互斥的操作,一个线程需要等待另一个线程处理后再进行接下来的操作等等。接下来我们看一下线程的互斥,原子操作。原子操作 ,是多线程程序中 “最小的且不可并行化的” ...

2020-02-05 16:32:21 354

原创 使用Windows API实现自定义线程类CThread

我们在使用QThread的时候,只需要继承QThread重新实现 run() 函数就可以了,使用起来很方便,接下来就介绍一种实现自定义的类 CThread ,只要继承 CThread 后,重新实现 run() 函数即可。关于 QThread 的使用可以参见 使用Qt中的QThread创建线程或者访问我的 个人博客主页 http://www.douzhq.cn ,导航栏中点击多线程,然后也可以...

2020-02-04 18:44:36 343

原创 使用Qt中的QThread创建线程

文章目录1. 使用信号和槽的形式触发2. 使用继承自QThread方式触发3. 几点说明上篇文章中简单介绍了如何使用 Windows API 和c++11中的 std::thread 创建线程。线程的创建和基本使用本篇文章将会介绍如何使用QThread创建线程。QThread是Qt所有线程控制的基础,每一个QThread实例对象控制一个线程。QThread可以直接实例化使用也可以用...

2020-02-03 17:13:22 300

原创 线程的创建和基本使用

文章目录1. 什么是线程? 为什么要用多线程?2. 线程的创建和使用(1) 使用操作系统API创建(2) 使用C++11创建(3) c++11线程ID的获取1. 什么是线程? 为什么要用多线程?线程,是操作系统能够运行和计算和调度的最小单位。一个进程至少要包含一个线程,线程要包含在进程中,是进程实际运作单位。一个进程中可以多有个线程,每个线程并发执行。每个线程有独立的栈空间,线程之间共享静...

2020-02-01 22:25:06 153

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除