草上爬
专注技术,热爱分享
展开
-
QTreeView和QTableView单元格添加超链接
QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。二.实现QHTreeView.hQHTreeView.cppMainWIndow.cpp在QHTreeView中通过带下划线的文本来模拟超链接,当鼠标悬浮在带下划线的文本上时,鼠标指针变为小手形状,在鼠标点击时触发超链接。这种方法的缺点原创 2025-02-09 22:35:08 · 351 阅读 · 0 评论 -
QTableView仿Excel表头排序和筛选
QTableview仿Excel表头排序和筛选:Excel功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选原创 2024-07-14 19:14:42 · 1903 阅读 · 14 评论 -
QML实现的图片浏览器
QML实现的图片浏览器,功能包括:●悬浮工具栏●支持图片缩放、旋转、还原、旋转、拖动。●拖动图片时,释放鼠标图片会惯性滑动。●支持左右翻页查看文件夹中的图片。●支持保存图片至本地。原创 2024-01-11 02:01:50 · 3403 阅读 · 94 评论 -
Qt之基于QCustomPlot绘制直方图(Histogram),叠加正态分布曲线
Qt之基于QCustomPlot绘制直方图(Histogram),叠加正态分布曲线高斯分布(Gaussian distribution),又名正态分布(Normal distribution),也称"常态分布",也就是说,在正常的状态下,一般的事物,都会符合这样的分布规律。比如人的身高为一个随机变量,特别高的人比较少,特别矮的也很少,大部分都集中在中等身高。人的智商也是如此,社会精英毕竟少数,大多都是普通人。若随机变量X服从一个位置参数为μ,尺度参数为σ^2的概率分布. 且其概率密度函数为。原创 2023-10-31 01:14:15 · 6320 阅读 · 14 评论 -
Qt之实现类似软件安装时的新功能介绍界面
在软件安装时,一般会轮播软件的新功能,安装后,如果还想查看这些新功能该怎么办呢,我们可以把这个介绍新新功能的小应用集成到软件的“帮助”菜单中,比起纯黑文字的无趣介绍,图文方式的呈现会生动得多。最近在看《赘婿》,借几张图过来用用。原创 2023-03-24 13:33:36 · 5018 阅读 · 0 评论 -
Qt之高仿QQ系统设置界面
QQ或360安全卫士的设置界面都是非常有特点的,所有的配置项都在一个垂直的ScrollArea中,但是又能通过左侧的导航栏点击定位。这样做的好处是既方便查看指定配置项,又方便查看所有配置项。原创 2023-03-11 08:28:23 · 7543 阅读 · 5 评论 -
Qt之基于Graphics View实现Mesh网络拓扑图
Mesh是一种多节点、无中心、自组织的无线多跳通信网络,也就是网状结构网络。网络中所有的节点都互相连接,每个节点拥有多条连接通道,所有的节点之间形成一个整体的网络。原创 2023-01-17 22:30:33 · 8797 阅读 · 52 评论 -
Qt之加载百度离线地图(WebKit和WebEngine)
发现存在很多问题,比如不加加载折线等图形覆盖物;只支持QtWebKit,不支持QtWebEngine。之前做项目需要在百度离线地图上绘制Mesh拓扑图,必须添加折线覆盖物,使用的是百度离线地图API V2.1,满足需求。除了添加或删除自定义覆盖物外,还支持添加自定义控件,打开或关闭信息提示窗口等等。原创 2023-01-14 15:20:55 · 7877 阅读 · 9 评论 -
QML中使用自定义Model和SortFilterProxyModel实现搜索
图1中的ID不连续,是因为按照是否在线(是否在线是随机生成的)和登录时间这两个条件排序了,在线的显示在上面,离线的显示在下面图2中展示了上线和下行的排序效果图3中展示了置顶和取消置顶的排序效果,以及显示置顶和显示全部的过滤效果。置顶时会同时涉及到两个排序条件:是否置顶和置顶的时刻图4示中展示了中文和拼音的模糊搜索,也就是说要支持中文或拼音的过滤,这就会用到SortFilterProxyModel的容器类filter——AnyOf,过滤不仅括搜索,还包括前面提到的显示置顶过滤,这就会用AllOf原创 2022-08-24 13:52:32 · 5040 阅读 · 0 评论 -
Qt之分类导航主界面
Qt之分类导航主界面,然后主要就是Qt动画类QPropertyAnimation和页面切换类QStackedWidget的应用。这是很久之前用的一个主界面,还是有一点点科技感的。,这个开源项目有bug,本文中修复了一些。原创 2022-08-20 16:45:40 · 6116 阅读 · 1 评论 -
Qt之渐变及其应用(绘制温度计、仪表盘和指示灯)
Qt之渐变及其应用(绘制温度计、仪表盘和指示灯)原创 2022-07-31 12:56:07 · 6207 阅读 · 8 评论 -
Qt之解析HTML
先复制网页的内容并粘贴到QTextEdit中,当然QTextEdit中显示的是已经解析好的,网页中有一张图片,因为网络图片没法直接显示在QTextEdit中,因此这里只显示了图片地址如果要显示网络图片,得先下载,下面是个Qt显示网络图片的例子,代码见后面章节接着复制word中的内容并粘贴到QTextEdit中,word中的内容就是刚才复制网页粘过去的,word中的图片已经缓存到本地了,因此粘贴到QTextEdit时,图片是可以显示的。..................原创 2022-07-23 20:31:24 · 7997 阅读 · 3 评论 -
Qt之使用QTreeView实现QQ好友列表
在MVC中,模型负责获取需要显示的数据,并且存储这些数据的修改。每种数据类型都有它自己对应的模型,但是这些模型提供一个相同的API,用于隐藏内部实现。视图用于将模型数据显示给用户。控制器是模型和视图之间的媒介,将用户的动作解析成对数据的操作,比如查找数据或者修改数据,然后转发给模型执行,最后再将模型中需要被显示的数据直接转发给视图进行显示。同样,这种架构也允许使用不同界面显示同一数据,也能够在不改变数据的情况下添加新的显示界面。☆来自委托的信号在用户编辑数据项时使用,用于告知模型和视图编辑器的状态。....原创 2022-07-19 23:10:14 · 6337 阅读 · 27 评论 -
Qt之使用QListView实现QQ登录历史列表
头像、昵称和账号都是绘制的,删除按钮也是绘制的,只所以有点击效果,是因为editorEvent中处理了QEventMouseButtonPress和QEventMouseButtonRelease事件,具体见代码。m_mouseOver的作用是只有当鼠标在QListView上时才允许Item的hover效果,当鼠标在滚动条是不允许Item的hover效果。如果不这样做,当拖动滚动条的时候,Item也会更随着hover,如下所示,这显然不是想要的效果。通常popup弹窗是会有阴影的,如下图所示。.......原创 2022-07-16 09:39:47 · 5466 阅读 · 4 评论 -
Qt实现的酷炫轮播图
无倒影 有倒影Qt中每一个窗口都有一个坐标系,默认的,窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小。原点即为(0,0)点,然后以像素为单位增减。例如:我们先在原点(0,0)绘制了一个长宽都是100像素的红色矩形,又在(-50,-50)点绘制了一个同样大小的黄色矩形。可以看到,我们只能看到黄色矩形的一部分。效果如下:如果自己绘制无法满足要求,可以使用QPainter的坐标换行,涉及的函数包括:translate()函数,进行平移变换;scale(原创 2022-07-12 16:15:51 · 5298 阅读 · 29 评论 -
Qt之实现QQ天气预报窗体翻转效果
目前据我所知,最新版的QQ有两个地方用到了窗体翻转特效,一个是登录,另一个是天气预报下面是我实现的效果,只实现了翻转,其实天气预报功能也很简单,调用接口,解析数据然后贴图就行,关于天气预报详见下面章节 看梅花9,大家一定似曾相识,没错,素材来自Qt官方demo flipable,该demo是用QML实现的翻转效果,话说用QML实现特效比Widget要方便很多。这里是用Widget实现的,不同点是flipable翻转的是图片,这里翻转的是窗体,下面说说实现原理毫无疑问,这里用到了Qt的动画模块,关于Qt动画原创 2022-06-28 23:14:10 · 5973 阅读 · 11 评论 -
Qt之实现动效导航栏
一.效果 二.实现现在随便点开一个应用,都会有侧边导航栏的身影,比如clash目前,侧边导航栏设计已经成为一种持续更新中的设计趋势。现在很多应用,特别是设置页面都会包含侧边导航栏,网页中更是常见,在网页设计中侧边导航栏设计会使用单一的纯色打底,包含较少的选项,导航栏顶端通常会包括logo,文字链接,以及带有小图标的社交媒体账号链接。想要侧边导航栏发挥最大的作用,秘诀在于控制好侧边栏本身和右侧内容的对比度,要包含足够清晰可见的导航条目,还要能在移动端上良好地运作。另外,要注意的是,不要因为屏幕侧边够长,就企原创 2022-06-26 23:36:54 · 9183 阅读 · 5 评论 -
Qt之自定义带游标的QSlider
最近翻看6年前写了一篇关于QSlider的博客:Qt自定义带游标的slider,在滑块正上方显示当前值发现存在很多问题,比如游标的坐标不准确;如果游标宽度稍大,滑到Slider最左或最右的时候会显示不全;游标不够美观。PS:这里有个漂亮的Slider样式表https://blog.youkuaiyun.com/caoshangpa/article/details/53389517于是今天再实现了一遍,依然是子类化QSlider,效果如下,支持设置游标的尺寸:这一次的实现比之前简洁很多,只需要重新paintEvent原创 2022-06-24 23:07:10 · 6071 阅读 · 4 评论 -
Qt之自定义QCheckBox
要实现“漂亮”的QCheckBox有两种方法,一种是贴图,一种是自绘,效果如下所示:这里两种方法都用到了Qt样式表(style sheet),方法一直接加载QSS,通过check状态切换图片,QSS如下方法一有三个明显的缺点1.需要美工,效果图中的图是我自己p的,p的不太好,边缘锯齿明显2.checkbox缩放时图片会变形3.指示器(indicator)滑动时没有动画效果,好吧这里根本没滑动相比方法一,方法二就没上面的三个缺点,其实现原理如下:我们实现一个自己类QHCheckBox,该类继承原创 2017-11-27 11:33:16 · 8391 阅读 · 0 评论 -
Qt仿QQ截图
这是一个参照QQ用Qt 5.12.2 VS2017做的截图工具,实现了以下功能:1.自动识别窗口,可点选2.支持框选截图区域3.支持截图区域移动和缩放4.支持鼠标所在位置放大取色5.支持实时显示截图区域大小6.支持保存到剪贴板或本地7.支持全局快捷键8.支持矩形、椭圆、箭头、画笔和文本工具马赛克工具的实现可参考:Qt实现QQ截图中的马赛克效果文本工具的详细介绍可参考:Qt仿QQ截图之QTextEdit宽高自适应9.支持撤销10.支持高分屏11.跨平台,支持windows和mac双原创 2022-06-16 13:51:19 · 5479 阅读 · 9 评论 -
Qt之libVLC或者海康SDK视频上显示透明控件
通常在使用libVLC或者海康SDK的时候,会把widget的winID当做参数传进去,此时如果直接在该widget上放置按钮等控件,这些控件在视频渲染的时候就会被刷掉,无法显示。那么只能将这些控制按钮放置widget外,一般是widget下方,这样做虽然中规中矩,但是如果视频窗口本来就很小,还得被控制按钮挤压空间,就不太合适了。......原创 2016-11-12 20:17:31 · 27849 阅读 · 5 评论 -
Qt之cuda硬解码
一.效果下图是CUDA解码后,显存数据直接用D3D9渲染后的效果和CPU占用情况。测试视频:盛世中华(封装格式webm,分辨率4K)CPU:Intel Core i7-8700 3.20GHzGPU:NVIDIA GeForce GTX 1050与dxva2硬解码做个相比,CUDA硬解码CPU占用更低,GPU占用则低得多。二.windows开发环境搭建1.安装CUDA ToolkitCUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CU原创 2022-04-22 21:17:53 · 5731 阅读 · 2 评论 -
Qt之dxva2硬解码
先来看看硬件加速API在各系统和硬解环境的支持情况,如下表所示:从表中可以看出,虽然DXVA2硬件加速仅适用于Windows,但它支持所有主流的GPU硬件厂商,因此在Windows上实现DXVA2硬解很有必要。ffmpeg原生支持DXVA2硬解,但是解码后数据必须先从现存拷贝到内存,才能做渲染,这里实现DXVA2解码后,显存数据直接用D3D9渲染。一.效果下图是DXVA2解码后,显存数据直接用D3D9渲染后的效果和CPU占用情况。测试视频:盛世中华(封装格式webm,分辨率4K)CPU:In原创 2022-04-22 21:12:19 · 6644 阅读 · 14 评论 -
Qt之打开IOS相册图片和保存图片到相册
打开相册图片很简单,这里主要说明的是保存图片到相册的两种情况:1.已知图片路径,保存到相册;2.将QImage直接保存到相册一.打开相册图片这里需要设置xcode工程的相册权限Privacy - Photo Library Usage Description,允许此权限才能使用系统相册,如下图所示:此外,关于 IOS 的一些常用权限,可以顺便了解一下,也是通过同样的方式进行打开的:相机权限:Privacy - Camera Usage Description 允许此权限才能使用相机功,这样原创 2022-03-09 21:19:13 · 5324 阅读 · 1 评论 -
Qt之快速生成缩略图thumbnail
在做聊天时通常会上传两张图片到服务器,一张原图,一张缩略图,缩略图由于尺寸小,上传速度快,增强了聊天的“即时”性。但是如果生成缩略图花费的时间过长,“即时”性将会大打折扣。一种常用的图片缩放策略是:1.如果图片的宽高都大于目标宽高,则先等比例缩放图片,使其宽或高与目标尺寸相等,然后再截取目标大小的区域。这种情况相当于先将QImage QImage::scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::Ignor原创 2022-03-07 20:58:32 · 6680 阅读 · 1 评论 -
QImage/QPixmap加载图片失败(宽和高都为0)的三种解决方法
先看现象,这里有一张图片test.png,windows照片查看器可以正常打开但是用QImage加载时QString filePath = qApp->applicationDirPath()+"/test.png";QImage image(filePath);qDebug()<<image.isNull()<<image.width()<<image.height()输出为:true 0 0这里用到了QImage的构造函数:QImage:原创 2022-03-07 19:30:05 · 9699 阅读 · 0 评论 -
Qt Webengine处理Excel二进制流输出(ArrayBuffer)
通常在浏览器中可以通过Blob下载二进制Excel,代码如下:export const excelDownLoad = (url, data = {}) => { axios({ method: 'post', url:"****************", data:{ parameter:***, } responseType: 'arraybuffer' }) .then(res => { //...原创 2021-12-13 09:42:10 · 5261 阅读 · 0 评论 -
Qt之使用GDI实现屏幕快速抓图与缩放
一.抓取和缩放调动Qt自带的方法抓图效率很低,在实时性要求较高的场合无法满足要求,比如说抓图并转化成视频流传输来实现屏幕共享。这里采用GDI的方法来抓图,实测在抓取整个桌面(分辨率1920*1080)并等比例缩放到(1280*720)的情况下,不含鼠标耗时40毫秒左右,含鼠标50毫秒左右,基本满足要求。下面是测试所用电脑配置:抓取整个桌面或指定区域实际上原理是一样的,只不过桌面是个大一点的区域,在实际应用中可用用一个带边线可缩放的透明窗体来指定这个区域,如下图所示:1.获取区域大小.原创 2021-08-06 19:28:58 · 6158 阅读 · 7 评论 -
Qt之调用FFTW3实现音频频谱(实现)
关于原理详见博客:Qt之调用FFTW3实现音频频谱(原理)一.音频输入1.首先获取麦克风等音频输入设备2.然后设置音频采样参数,这里将参数设置成最简单的方式:单声道、采样大小为8。因为第二部分音频输出会将采样参数设置为双声道、采样大小为16,这样的话就方便对比不同采样参数下的音频数据获取m_audioFormat.setSampleRate(8000);m_audioFormat.setChannelCount(1);m_audioFormat.setSampleSize(8);m_a原创 2021-08-04 23:10:19 · 10615 阅读 · 73 评论 -
Qt之调用FFTW3实现音频频谱(原理)
一.效果最近在用播放器业界天花板PotPlayer听歌时,发现其频谱跳动非常有趣,如下所示:于是决定自己实现一个,如下所示:别看功能很简单,但是涉及到的原理还是挺多的,本篇主要是关于原理的总结。二.频谱的原理既然是频谱,必然和频率相关。鼓声和弦乐的频率范围相差很大,当音乐中有震耳的鼓声时,频谱中低频的部分就跳的很高,说明这部分频率的功率比较高。同样,当高亢的小提琴声音响起时,频谱中高频的部分就跳的很高,说明高频部分的功率比较高。正是因为这个关系,频谱总是和正在播放的音乐...原创 2021-08-02 20:58:04 · 9248 阅读 · 32 评论 -
Qt之正则表达式匹配网址(URL)
几乎可以匹配所有网址,附QWidget和QML例子。匹配规则:1.以http(s)://或者www.开头2.以空格或中文字符结尾一.效果QWidgetQML二.正则表达式语法正则表达式的语法一般如下(js),两条斜线中间是正则主体,这部分可以有很多字符组成;i部分是修饰符,i的意思表示忽略大小写/^abc/i正则定义了很多特殊意义的字符,有名词,量词,谓词等,下面逐一介绍1.简单字符没有特殊意义的字符都是简单字符,简单字符就代表自身,绝大部分字符都是简单字符,举个例原创 2021-04-06 19:41:51 · 5893 阅读 · 0 评论 -
Qt仿QQ截图之QTextEdit宽高自适应
之前用Qt做了个截图工具,最值得一写的就是在图片中添加文字时,如何让QTextEdit自适应文本的宽高值得参考的是这篇博客:https://blog.youkuaiyun.com/kaida1234/article/details/80094175但也只是做到了宽度自适应,高度并没有这里的核心函数是void QTextDocument::adjustSize(),它他可以跟随文本的变动调整大小,然后通QSizeF QTextDocument::size()可以获取准确的文本尺寸,接着根据此尺寸调整编辑框的宽高,从而原创 2021-04-04 22:14:30 · 6050 阅读 · 5 评论 -
QOpenGLWidget与QPainter混合渲染
QOpenGLWidget取代了之前的QGLWidget类,用以在Qt中提供OpenGL的编程接口。在QGLWidget类中,我们可以通过方法drawTexture来绘制文本。但是在QOpenGLWidget类的时候,这个方法没有提供了。官方文档给出的建议是混合QPainter使用。本文档就是介绍怎么用QPainter来在OPengl窗口上绘制2D文本、最近在用webRTC做直播的时候,需要在视频窗口左边下角显示用户名。视频是yuv420p格式,在QOpenGLWidget中用着色器渲染,用户名的话,用Q原创 2021-03-24 17:16:32 · 6546 阅读 · 0 评论 -
Qt之SVG转QPixmap并改变颜色
方法有两种,使用QSvgRenderer与不使用QSvgRenderer一.效果二.Qt小贴士:在高分屏下渲染SVG到QPixmap (译)使用Qt类将SVG转换为QPixmap格式是非常容易的,在Qt文档中有些相关的例子,但是这些例子仅仅处理了屏幕设备的标准像素比为1的情况。如果你需要在高分屏上显示图像,结果会有些不一样。下面的函数传入SVG文件的路径,并根据第一个参数指定的尺寸返回QPixmap。QPixmap FromSvgToPixmap(const QSize &..原创 2021-03-14 17:56:13 · 8409 阅读 · 0 评论 -
Qt动画之等待/加载效果
1.支持设置线条和文字的颜色2.支持设置线条的圆角0-100,100表示最圆3.支持设置线条的透明度4.支持设置每秒旋转几圈5.支持设置线条个数6.支持设置线条长度7.支持设置线条宽度8.支持设置内部空白圆的半径9.支持设置文字原创 2021-03-07 21:48:55 · 8821 阅读 · 1 评论 -
Qt实现的注册码工具
一.效果注册软件启动时检测是否注册成功二.QT获取CPU、主板、硬盘、网卡等相关数据强大的wmic(Windows Management Instrumentation,Windows管理工具),提供了从命令行接口和批命令脚本执行系统管理的支持。可以打开cmd在其中输入如下命令,获取相关的信息。//获取cpu名称:wmic cpu get Name//获取cpu核心数:wmic cpu get NumberOfCores//获取cpu线程数:wmic cpu get Num原创 2021-02-26 22:15:24 · 10526 阅读 · 37 评论 -
Qt之GIF录制工具
一.效果二.特性1.高压缩比,几百K即可拥有丰富的gif图2.支持录制鼠标指针3.支持设置帧率4.捕捉框框所在的录制范围内画面无变化时,不会增加新的帧,而是只会增加延时,可以非常有效减小 GIF 文件的体积5.录制过程中,支持暂停和继续三.GIF存储结构GIF是一种使用LZW压缩,支持多张图像的容器。支持256色,透明通道为1bit。作为互联网表情包的载体,GIF这项80年代的技术依然生生不息。但它的弊端也是显而易见的:易出现毛边,色彩表现低劣,文件压缩比不高。针对这些问题,M原创 2021-02-14 22:47:14 · 5227 阅读 · 4 评论 -
Qt动画之仿Win8 Metro主界面
一.效果gif看着有点卡,真实效果很丝滑。二.实现使用QSignalTransition与QPropertyAnimation相结合的方法实现。#include "MainWindow.h"#include "ui_MainWindow.h"#include "KlLabel.h"#include <QPropertyAnimation>#include <QSignalTransition>#include <QDebug>Mai原创 2021-02-09 13:33:46 · 5223 阅读 · 4 评论 -
QML实现自定义滚动条(ScrollBar)的TableView
一.效果这里将国产水果标识为红色二.代码实现import QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 1.5import QtQuick.Controls 2.5import QtQuick.Controls.Styles 1.4Window { visible: true width: 400 height: 300 title: qsTr("TableView")原创 2021-02-03 21:11:23 · 7868 阅读 · 7 评论 -
Qt实现QQ截图中的马赛克效果
stylesheet本文不准备谈样式表的使用。因为Manual中介绍的很清楚了,给的例子也都很不错。再就是我本身对CSS语法不太熟,术语把握不好,qss用的不多。不过,有两个问题新手似乎特容易迷惑,简单提一下:QWidget直接派生类的样式表不起作用典型的表述(之一)是,从QWidget派生一个窗口,使用stylesheet设置背景,在designer中可以原创 2016-05-14 14:16:21 · 7137 阅读 · 5 评论