qt
文章平均质量分 77
douzhq
这个作者很懒,什么都没留下…
展开
-
Qt Windows和Android使用MuPDF预览PDF文件
Windows和Android下,使用Qt和MuPDF库预览PDF文件原创 2024-02-07 18:31:07 · 1977 阅读 · 0 评论 -
异地过年,我要用它看春晚!- Qt趣味开发之基于QtAV的电视播放器
今年过年因为疫情的关系,在工作地点过年。家里穷的连个电视都没有,春晚都看不了,怎么办??!!QtAV是一个开源的音视频播放器,支持播放本地文件和网络流媒体。并集成了多种视频渲染方式,使用它的简单的API可以轻松的实现做一个网络电视播放器(我这里在网上找的RTMP的地址)。更多关于QtAV的介绍,可以参考QtAV的github主页:https://github.com/wang-bin/QtAV下面是我基于QtAV做的简易版本的电视播放器:QtAV播放RTMP的代码也很简单:using nam原创 2021-02-10 16:31:59 · 1830 阅读 · 0 评论 -
Qt与OpenGL趣味开发 - 绘制炫酷倒影
我们来用Qt和OpenGL绘制一个倒影,先看一下显示效果:绘制方法比较简单,步骤如下:绘制正常的两个箱子。绘制地板。绘制前,禁止 深度测试 写入;开启 蒙版测试 ,将蒙版测试函数设置为 GL_ALWAYS ,绘制时将蒙版缓冲区写入1。绘制后,开启深度测试写入。绘制倒影的箱子。绘制前,设置模板测试函数,参数为 GL_EQUAL ,表示蒙版缓冲区为1的时候才会通过蒙版测试。绘制时只要把箱子绘制的灰一点,就可以实现了倒影的效果。绘制部分的关键代码如下:// 开启深度测试glEnable(GL_原创 2021-02-08 16:37:00 · 1163 阅读 · 0 评论 -
圣诞节到了!!你的桌面下雪了吗?? - Qt趣味开发之让你的桌面下雪
圣诞节到了,写个桌面下雪的程序庆祝一下。过节也是要有仪式感的!!显示效果如下:具有如下功能:托盘菜单,可以配置、关于作者、退出。可以配置是否下雪、烟花效果,配置雪的浓度和下降的速度。完整代码和可执行程序下载:可执行程序:链接:https://pan.baidu.com/s/1NMod82jHwLsZE944Tl7KSg提取码:ne9u源码下载:链接:https://pan.baidu.com/s/1_Wq7zyG_R24HkJUX9uTXbw提取码:ragy1. 下雪的实现原创 2020-12-25 03:41:16 · 2658 阅读 · 4 评论 -
Qt趣味开发之打造一个3D名字渲染小工具
文章目录1. 名字数据生成工具2. OpenGL名字渲染工具3. CPU名字渲染工具(1)投影(2)面消隐算法本篇文章讲介绍三个软件:名字数据生成工具OpenGL名字渲染工具CPU名字渲染工具这三个小东西一共花了我三天时间,接下来分别看一下这是三个软件的显示效果:名字数据生成工具 ,点击Create可以生成名字数据(本人不姓李哈^v^)OpenGL名字渲染工具 , 使用Opengl渲染成3D图像,点击Load加载之前生成的数据CPU名字渲染工具 , 接下来是使用CPU实现的渲染同原创 2020-12-10 10:31:22 · 702 阅读 · 0 评论 -
基于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 · 3822 阅读 · 23 评论 -
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 · 1193 阅读 · 0 评论 -
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 · 1420 阅读 · 0 评论 -
使用QGraphicsBlurEffect实现图片背景模糊效果
先看一下实现效果:类 QGraphicsBlurEffect 可以实现图像的模糊效果,它的相关接口主要有如下两个:void setBlurHints(QGraphicsBlurEffect::BlurHints hints)void setBlurRadius(qreal blurRadius)setBlurHints 是设置模糊质量的函数,它的参数有如下几种:PerformanceHint 表明渲染性能是最重要的因素,但可能会降低渲染质量。(默认参数)QualityHint 表明渲染原创 2020-06-25 14:37:50 · 3294 阅读 · 8 评论 -
使用FFMpeg API 获取摄像头的图像数据
文章目录1. 获取摄像头的信息2. 打开并初始化摄像头3. 获取摄像头数据及渲染摄像头是我们比较常用的外设,很多场景我们都会用到摄像头。比如视频直播、视频监控等各个领域都会用到摄像头。摄像头图像数据的获取,方法有很多,比如可以使用Qt自带的API获取,也可以使用DirectShow、OpenCV、FFMpeg提供的API方式获取(本质上是通过DirectShow)。本篇文章主要讲述使用FFMpeg API获取摄像头的数据信息。下面是一个简单的摄像头显示的例子的实现效果:使用FFMpeg获取摄像头的原创 2020-05-25 01:00:26 · 5190 阅读 · 0 评论 -
使用PythonQt实现C++与Python混合编程
PythonQt提供了一种将python脚本语言嵌入到Qt C++程序中的简单方法。我们可以使用一种脚本语言,扩展我们的应用,Qt中对于脚本化扩展应用程序有两种方法使用JavaScript扩展。可以参考我的上一篇文章,使用Qt QJSEngine实现JavaScript与C++混合编程使用Python扩展。很多知名的软件都是用python脚本的方式,扩展自己的应用程序:Blende...原创 2020-04-19 00:12:51 · 8180 阅读 · 8 评论 -
使用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 · 6111 阅读 · 1 评论 -
基于QGraphicsView的简易画板EasyCanvas -- 第一版
最近使用 QGraphicsView 做了个简易的画板 EasyCanvas ,界面效果如下:具有如下功能:画布设置图元添加和修改保存为图片1. 画布设置可以通过右侧画布属性,设置画布的尺寸和背景颜色2. 图元设置可以添加、修改、删除图元,通过鼠标拖拽的,选择、平移和旋转关于平移、改变尺寸和旋转可以参照这上一篇文章:自定义QGraphicsItem实现平移、改变尺寸和...原创 2020-03-30 22:52:58 · 5063 阅读 · 6 评论 -
自定义QGraphicsItem实现平移、改变尺寸和旋转
文章目录1. 平移2. 改变尺寸3. 旋转我们在使用QGraphicsView框架的时候,经常需要自定义QGraphicsItem,并且需要实现Item的平移、改变大小和旋转的效果。接下来介绍他们的一种实现方式1. 平移平移效果如下图所示:实现方式有两种方法:使用QGraphicsItem本身的移动标志实现。this->setFlag(QGraphicsItem::Ite...原创 2020-03-21 22:34:02 · 18579 阅读 · 25 评论 -
QtConcurrent多线程 - map、mapped和mappedReduced
文章目录1. map 和 mapped2. mappedReduced3. 其他扩展Qt中的 Concurrent 模块为我们提供了在一个序列容器类型针对每一个元素的多线程并行运算,比如 QList 、 QVector 。QtConcurrent::map() :对序列的每一项元素都应用一个函数,并将运算结果替换原来的元素。QtConcurrent::mapped() :功能类似 ma...原创 2020-03-09 22:32:10 · 4859 阅读 · 1 评论 -
使用QWaitCondition实现一个简单的线程池
上篇文章主要讲了线程池的使用Qt中的线程池QThreadPool本篇文章使用Qt的条件变量 QWaitCondition ,实现一个简单的线程池关于 QWaitCondition 的使用,可以参照 线程的互斥和同步(7)- Qt的条件变量QWaitCondition先来说一下简单的思路,线程池初始化时创建一定数量的线程(8个) ,所有的线程处于挂起状态。当任务添加到列表时,唤醒一个线程执...原创 2020-03-06 22:21:45 · 610 阅读 · 1 评论 -
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 · 9823 阅读 · 1 评论 -
线程的互斥和同步(9)- Qt中的读写锁QReadWriteLock
Qt中提供了 QReadWriteLock 类,我们可以方便的使用读写锁。读写锁 是指 读锁 和 写锁 。适用于多个线程读操作比较频繁,而写操作不频繁的场景中。它能够保证多个线程读操作访问资源时同时进行,而写入操作时阻塞读操作。也就是我们常说的,读共享 和 写独占 。1. 读共享和写独占读共享 :当其他线程占用读锁的时候,如果其他线程请求读锁,会立即获得。当其他线程占用读锁的时候,...原创 2020-02-27 21:27:09 · 2809 阅读 · 1 评论 -
Qt中的线程池QThreadPool
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永...原创 2020-02-26 22:50:41 · 13410 阅读 · 2 评论 -
线程的互斥和同步(7)- Qt的条件变量QWaitCondition
QWaitCondition 提供了一个用于同步线程的条件变量。它允许一个线程后告诉其他的线程已经满足了某种条件;一个或多个线程可以阻塞等待 QWaitCondition 来使用 wakeOne() 或 wakeAll() 设置条件。使用 wakeOne() 唤醒一个随机选择的线程或者 wakeAll() 唤醒全部等待的线程。下面是 QWaitCondition 类中,常用的函数介绍:bo...原创 2020-02-23 13:09:54 · 1968 阅读 · 1 评论 -
线程的互斥和同步(6)- Qt的信号量QSemaphore
上一篇文章主要介绍了使用Windows API创建和使用信号量Semaphore线程的互斥和同步(5)- Windows的信号量Semaphore本篇文章只要介绍Qt的信号量 QSemaphore 类的使用,并用一个 生产者-消费者 实例来说明信号量是如何提高多线程的效率的。下面是使用类 QSemaphore 常用的函数:void acquire (int n = 1); 表示请求n...原创 2020-02-20 20:59:10 · 1707 阅读 · 1 评论 -
线程的互斥和同步(4)- Qt中的互斥锁(QMutex和QMutexLocker)
上一篇文章主要介绍了Windows的互斥锁线程的互斥和同步(3)- Windows的互斥锁Linux也有自己API来操作互斥锁,对于跨平台的操作,Qt帮助我们使用一套代码实现相同的效果。Qt中使用类 QMutex 和 QMutexLocker 来实现和管理互斥锁。类 QMutex 的主要函数有:lock (); 加锁,如果该互斥锁被占用,该函数阻塞,直到互斥锁被释放。u...原创 2020-02-17 21:30:35 · 1819 阅读 · 1 评论 -
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 · 4336 阅读 · 2 评论 -
个人技术文章汇总
QGraphicsView框架。Windows程序设计。原创 2020-02-09 18:40:17 · 5004 阅读 · 0 评论 -
Qt自定义ColorDialog(支持RGB和HSV)
文章目录1. HSV和RGB2. H分量圆盘绘制3. SV画布绘制当我们做软件开发的时候,经常需要编辑颜色,有时需要同时编辑RGB和HSV的颜色。这是一个自定义的颜色对话框,如下图所示具有如下功能:支持RGB和HSV颜色值得修改和预览支持添加自定义颜色(点击按钮添加或鼠标拖拽添加)修改颜色效果预览:添加自定义颜色效果预览:颜色控件效果预览:下面是主要用到得技术点说...原创 2020-02-08 17:51:02 · 5574 阅读 · 18 评论 -
基于Qt的简易Http下载软件
文章目录1. 发送head请求获取文件大小信息2. 发送获取部分文件请求3. 设置代理一个简单的Http下载软件,支持 断点续传 ,文件下载完成后可直接预览,不过下载速度一般(每次请求大约10K的数据量,也没有使用短线成切片下载)下面的效果截图:完整效果演示:这里主要使用了使用了类 QNetworkAccessManager 、 QNetworkRequest 和 QNetworkRe...原创 2020-02-07 16:55:11 · 1953 阅读 · 0 评论 -
Qt中的模态、非模态、半模态对话框
文章目录1. 模态对话框(Modal)2. 非模态对话框(Modeless)3. 半模态对话框1. 模态对话框(Modal)模态对话框 是指在同一个应用程序中,阻塞其他可见窗口输入的对话框。一般用于用户输入文件名或用于应用程序的配置选项。可以分为应用模态和窗口模态。下面是一个模态对话框的显示效果:对话框的完整代码如下:头文件:class ModalDialog : public...原创 2020-01-03 23:26:38 · 1556 阅读 · 0 评论 -
Qt 切换城市显示(切换省、县、城市位置)
能够切换中国国内的所有省、城市、县,使用的是QQ安装目录下的I18N/2052/LocList.xml文件。程序运行效果如下: XML文件中的内容如下:<CountryRegion Name="中国" Code="1"> <State Name="北京&原创 2018-06-21 22:24:28 · 3043 阅读 · 4 评论 -
Qt渐变方式显示图片
使用渐变的方式浏览图片,效果如下: 制作的大概思路为使用Qt的属性动画,改变画笔绘制时的透明度,先绘制上一张图片,再绘制要显示的图片。下面仅贴出本示例的关键代码:头文件#include <QPropertyAnimation>class ImageView : public QWidget{ Q_OBJECT Q_PROPERTY(float...原创 2018-06-11 21:16:11 · 1351 阅读 · 0 评论 -
绘制贝塞尔曲线
我们在做项目的时候很多时候会绘制曲线,本篇文章介绍一种Qt绘制简单的贝塞尔曲线的方法。 程序的示例效果如下: 拖拽鼠标的控制点可以移动点的位置,可以随意拖拽出自己想要的曲线。(红色的点为曲线的起始和终止点,蓝色的点为贝塞尔曲线的控制点)头文件,BezierCurve.hclass BezierCurveWidget : public QWidget{ Q_OBJECT...原创 2018-05-26 22:19:19 · 2838 阅读 · 0 评论 -
Qt中的信号和槽
1.信号和槽的基本使用2.信号和槽的连接方式。3.信号和槽的一些注意事项4.跨线程的信号和槽信号和槽是Qt对象间通信的一种机制,是Qt的核心特性,也是Qt与其他应用框架的显著区别。1.信号和槽的基本使用信号和槽的基本使用如下: 使用信号和槽的类必须从QObject类或它的派生类继承,如果多继承,必须把QObject类放在第一位。 派生类在声明...原创 2018-05-26 21:14:54 · 927 阅读 · 0 评论 -
QSplitter QSS hover失效的解决办法
关于QSplitter在样式表中鼠标悬浮失效的解决方法:#include "widget.h"#include <QSplitter>#include <QTextEdit>#include <QVBoxLayout>Widget::Widget(QWidget *parent) : QWidget(parent){ QVBo...原创 2018-04-29 14:26:42 · 2760 阅读 · 1 评论 -
Qt中的属性系统
Qt提供了一个非常复杂的属性系统,既允许我们使用Q_PROPERTY()宏定义编译期间的静态属性,也允许我们使用setProperty函数添加动态属性。Q_PROPERTY()的宏定义如下:Q_PROPERTY(type name (READ getFunction [WRITE setFunction] | MEMBER memb...原创 2018-05-06 14:12:45 · 2272 阅读 · 0 评论 -
Qt中的事件(3)- 自定义事件
1、自定义事件步骤2、自定义事件类3、发送事件(1)sendEvent方法(2)postEvent方法4、事件处理1、自定义事件步骤有时为了开发需要,我们希望自定义事件来完成某种目的。实现自定义事件的步骤如下:继承QEvent。定义事件类型(取值在QEvent::User和QEvent::MaxUser之间,建议使用registerEventTyp...原创 2018-05-05 21:13:53 · 5624 阅读 · 7 评论 -
Qt中的事件(2)- 事件过滤器
在上一篇文章中,我们介绍了Qt的事件,事件的传递顺序,在对象处理事件前会经过对象过滤器来来判断事件是否向该对象中传递。本章我们来介绍一下Qt对象的事件过滤器。 上篇文章链接: Qt中的事件(1) 事件过滤器, 可以处理或者分发特定的事件。 ① 如果Qt没有提供和针对某个事件的特定的虚函数,我们可以使用事件过滤器来处理该事件。 ② 可以在事件传递到某个对象前,处理该事件,并做...原创 2018-05-05 16:50:37 · 433 阅读 · 0 评论 -
Qt中的事件(1)
1、Qt的事件简介2、重写特定事件处理器3、事件的传递和处理1、Qt的事件简介 Qt中提供了很多与外部设备交互的事件,如鼠标事件QMouseEvent,键盘事件QKeyEvent等。Qt中事件的分发大概流程是这样的: 1、QCoreApplication::notify函数。在Qt中事件都是QEvent的派生类的实例,所有QObject的派生类都可以处理...原创 2018-05-05 16:07:43 · 451 阅读 · 0 评论 -
Qt 解析Json数据显示天气信息
日丽天气使用的天气API为和风天气的免费天气API,和风天气API说明主页为https://www.heweather.com/documents。 关于天气系统的完整说明详见:Qt实战小工具 – 日丽天气V1.0 本天气系统中使用的API如下(parameters为需要填的参数信息): 3-10天天气预报:https://free-api.heweather.com/s6/weather/...原创 2018-06-21 22:49:31 · 1465 阅读 · 0 评论 -
绘制渐变的贝塞尔曲线
前面介绍了使用Qt中的API绘制贝塞尔曲线,本章介绍一下使用线段连接的方式绘制一条渐变的贝塞尔曲线。使用Qt的API绘制贝塞尔曲线可参见 绘制贝塞尔曲线 效果如下图所示: 二阶贝塞尔曲线的公式如下: B(t)=P0(1−t)3+3P1t(1−t)2+3P2t2(1−t)+P3t3,t∈[0,1]B(t)=P0(1−t)3+3P1t(1−t)2+3P2t2(1−t)+P3t3,t∈[0,...原创 2018-06-29 22:43:53 · 1543 阅读 · 0 评论 -
字符串四则运算表达式求值
1. 后缀表达式对于四则运算表达式,如 10+20-3*(10-5)+8 ,我们如何用程序实现这个运算表达式求值呢?可以使用 一种不需要括号的后缀表达法,我们也称为逆波兰(RPN)表示,如上面的例子10+20-3*(10-5)+8,使用后缀表示法就变成了这样10 20 + 3 10 5 - * - 8 +我们把这样的式子称为后缀表达式,叫后缀的原因为 所有的符号都在要运算数字的后面,那么...原创 2019-07-13 21:59:08 · 1722 阅读 · 0 评论 -
Qt 图片预览(等比例显示、放大、缩小、平移图像)显示
使用Qt的Painter绘制图像并显示,根据窗口的大小计算图片显示的尺寸,并可以对图片放大和缩小的显示,还可以对已经放大了的图片进行平移预览的操作。效果如下:使用函数 painter.translate() 对画布进行平移操作。使用函数 painter.scale() 对画布进行缩放的操作。完整代码如下:头文件:#ifndef IMAGE_VIEW_H#define IMA...原创 2018-12-09 22:27:07 · 22603 阅读 · 45 评论