自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

屁股大象的博客

个人博客:https://pigudaxiang.cn/

  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 Qt自定义控件之Carousel

Qt的轮播走马灯控件

2024-05-15 10:37:11 317

原创 解决Qt的列表加载大量数据卡顿的问题

本人在使用QListView插入大量数据时,界面卡顿十分严重。数据量大概只有上千左右,但是每个Item的内容比较多。当数据不停地插入一段时间后,卡顿到鼠标的移动都有点困难。

2023-08-10 10:46:31 2306

原创 Qt实现基于orb算法的两种长截图

使用Qt5并基于Opencv的模板匹配实现一个简单的长截图。

2022-08-05 10:12:01 837

原创 Qt自定义控件和模板分享

不定时把自己工作上写的常用的Qt控件分享到这里,当作个人记录,也希望能帮助到需要的人。,后面文章会在上面更新~分享的控件点击标题即可跳转到相关页面。控件代码的MainWindow都有对应的demo,直接运行即可。..................

2022-07-30 09:44:39 2737

原创 关于Qt的位图图像进行变化后,背景变黑的问题

我将格式的QImage,进行旋转后,发生了像素的改变。即原本白色(0xFF)的背景变成了黑色(0x00)

2022-07-26 23:50:54 1337

原创 分享一个qt实现的登录界面模板

分享一个前端玩烂的登陆界面模板。

2022-07-20 09:53:55 1131

原创 C++的defer实现

  在和朋友交谈时候,无意间了解到Go语言的defer,发现挺有意思的。和智能指针类似,当出了作用域后,被defer修饰的操作才会执行。下面贴一段伪代码:  当出了作用域后,defer修饰的操作才会执行。当逻辑代码出现大量的return或者try_catch时候,用上defer无疑会省去大量的重复代码。......

2022-07-11 19:06:47 1332

原创 Qt自定义控件之浮动操作按钮

效果实现  实现这个按钮唯一麻烦的点就在于算出N个子按钮弹出的位置。看下图:   假设:按钮散落的位置为0到180°,我们有N个按钮,圆心坐标为(x,y),圆心到散落按钮的左上角(leftTop)位置距离为R。  由于我们有N个按钮,散落的总角度为180°,则每个按钮的之间的夹角可以算出为180N−1​\frac{ 180}{ N - 1}​N−1180​​ ,我们定义为上图的夹角A。  则我们可以用三角函数轻松得出圆心到子按钮左上角的x轴和y轴的偏移量。分别为夹角A的对边和邻边。  则第i

2022-05-21 10:50:23 1651

原创 Qt之简易的多功能小相册

介绍  在刚开始接触Qt的时候,无意间看到Qt官方demo里,有个Photo Surface的demo,当初着实被惊艳到了,一直想着也跟着做一个。但可惜它是QML写的,趁着最近有点小时间,自己也写了个小小的相册。功能图片可自由移动、旋转、放大、缩小支持屏幕截图的导入支持QQ聊天截图的导入内嵌截图功能支持图片导出界面整体界面本地图片的导入和操作屏幕截图导入QQ截图或者系统截图皆可QQ聊天图片的导入QQ聊天框/编辑框的图片多幅导入截图功能有时候没登Q

2022-05-21 10:07:43 1178 3

原创 关于QImageReader多次调用read失败的问题

问题  在使用QImageReader时,想通过多次调用setScaledSize来设置不同尺寸,然后调用read读取到QImage中。  结果发现当调用一次了read后,后面再调用read,QImage都是null了。同时只要调用了一次read后,canRead函数都是返回false,errorString函数返回的错误是Unable to read image data。原因下面的思路都是建立在已经成功调用了一次read函数基础上去排查问题QImageReader  找到QImageRe

2022-05-11 18:46:17 1480

原创 关于Socket发送数据后,发现接收方的地址不是Socket指定地址的问题

问题  这个标题我不知道怎么起比较好。具体看下面的问题过程:  我在局域网内有三台设备,假设为A,B,C三台,三台设备通过交换机连接。其中A是我自己的电脑,B和C则是其它设备。A通过Udp给B和C发送数据。但是,当我给B发送数据的时候,结果是C收到数据并回复A。或者是我给C发送数据后,结果是B收到数据并回复A。原因  我将抓到的包发给了我组长,最终他发现了原因。B和C设备的Mac地址一样,导致地址冲突。  接着我将Mac地址修改后,三台设备的通讯恢复正常。结束  希望这篇记录能帮助到同样问题卡

2022-04-26 09:41:12 1950

原创 浅谈I/O模型里的同步、异步、阻塞、非阻塞

Linux的网络IO模型  Linux有五种网络IO模型,分别是阻塞IO,非阻塞IO,IO多路复用、异步IO、信号驱动IO。  可能由于中华文字的博大精深,同步和阻塞,异步和非阻塞这几个相近的概念许多人无法很好的理解。这篇文章中,我会从分别五种IO模型的流程入手,讲讲IO模型中的阻塞、非阻塞、异步以及异步的反面同步分别代表什么含义。  文章中阐述的是个人理解,若有不同见解,希望能留下宝贵的评论,不胜感激!程序中网络数据的接收过程  在说阻塞这些概念之前,我们得先了解应用程序接收网络数据的一个粗略流

2022-04-20 09:13:17 710

原创 关于Boost的Asio的信号灯超时时间已到错误

问题  最近在测试一个程序的时候,发现过一阵子报了信号灯超时已到错误,ASIO这边的错误码是121。花了点时间,发现了问题所在。原因  我自己测了一阵子后发现,大约7分钟左右,就会收到这个错误,此时TCP连接会断开。开始以为腾讯云的问题,接着我添加了心跳…是的,本来只是想看看能不能正常接收,没想到问题就解决了。  查阅了一些资料,发现根本原因应该是:由于TCP两端在指定时间内未交互数据,所以连接被剔除了。  但这还不是重点。因为我之前写的很多东西,都是没有心跳的,却能保证几个小时后还能正常通讯,不

2022-04-18 09:34:18 4262

原创 关于QGraphicsScene绘制大图片时产生空白的问题

问题  很早之前,在使用QGraphicsScene绘制一张横向大约7万个像素的图片时,图片绘制出来出了问题。绘制出来的结果是图片只显示了大约一半的内容,另外一半则全是空白的。  发生这么严重的问题,我当时第一反应谷歌了下,老外非常早就解决了我的疑惑:因为QPainter内部做了限制,最大尺寸是32767。当时因为急着处理项目,只是记录了下,未再深究。  奈何最近家里疫情,心里闷得慌,正好翻到了以前的笔记,花了点时间找到了原因。下面记录了我整个查找的流程,觉得啰嗦的可以倒序看😭。QPainter 

2022-03-31 16:18:08 1924

原创 聊聊编码格式

前言  想写这篇文章很久了,因为之前和朋友在交谈的时候,发现朋友从事行业多年,却对于编码这一块很陌生(当然,我不是指我很熟悉😳)。但碍于各种不可抗力因素,在这个疫情严重的下午,我决定抽空写写我对常见编码的一些理解。  这是第一次写大篇幅的文章,若有错误或更好的见解,我希望您能抽空在评论中指正,感激不尽!  如果你只是想快点知道GBK如何转UTF8,string如何转wstring,那么请赶紧去找其它文章吧~早期编码  早期的编码也就是ASCII编码,一共包含了128个字符。其中‘'0’到’31’用

2022-03-18 18:38:26 5041

原创 关于Qt生成不了翻译(.ts)文件的问题

问题场景    今天在准备生成翻译文件的时候,发现生成不了。开始还没注意,在我多按了几次更新翻译后,电脑风扇突然疯狂转起来了。自己电脑配置还是算高的,我打开任务管理器,发现后台多个lupdate.exe进程在疯狂占用CPU。    lupdate.exe是用来更新ts文件的,也就证明它在后台拼命帮我生成ts文件。那就是有东西阻碍了它生成,或者说要生成的量太大导致它阻塞在那。从CPU的占用情况个人觉得是第二种。解决方法&n

2022-02-12 14:01:32 2752

原创 关于Linux执行文件操作,断电后数据丢失问题

前言  在Debian下,批量执行cp命令后,机子立马断电(arm板),开机后发现文件大小都变为了0。但如果是过一会儿再断电,文件大小就正常。神奇的地方就在这边,我cp的文件里头有可执行文件,cp执行完是可以启动的,断电后反而打不开了,所以这个问题困扰了我很久。原因  我发现这个问题可能就我这个Windows屌丝不知道了[手动滑稽]。linux这边读写文件都是优先在cache里面的,也就是cache/buffer的机制。当回写进程触发,或者脏数据超时(简单来说就是满足条件触发回写),缓存才会开始把数据

2021-11-17 11:47:23 5048 2

原创 树莓派4B的开机动画---去除彩虹屏、光标、代码滚动、二维码、添加动画视频

前言很久之前,为了取消树莓派彩虹屏,开机命令行和开机动画折腾了很久。因为网上很多资料年代比较久远,再加上COPY的STYLE日益加重,百度一下

2021-11-16 20:53:28 4626 3

原创 树莓派4B的屏幕旋转和触控旋转

下午又搞了台树莓派,装完后发现屏幕倒过来了,折腾了一下午,问了下组长才知道屏幕是官方正版的,最后一条命令就解决了。不过一个下午也有收获,记录下来设备树莓派4B,系统为树莓派官方DEBIAN系统(比较新的版本)。官方正版屏幕旋转由于屏幕是官方正版,所以直接在/boot/config.txt,最后一行添加lcd_rotate=valuevalue的值为0、1、2、3分别对应0°,90°,180°,270°,根据自己的需要旋转就行。旋转90°就是lcd_rotate=1。屏幕旋转完,触控点也会跟着旋转。

2021-11-16 16:57:58 2717

原创 关于树莓派DSI屏幕触摸不准的问题

DSI触摸不准树莓派的DSI屏幕刚装上去就发现触摸不准,而且不准的很奇怪,越靠屏幕左边触摸就越准确,越偏向右边,偏离的越离谱。所以调用了input_calibrator校准,但是发现没啥用,屏幕右侧仍然歪的离谱。偶然无聊一直甩鼠标时候,发现鼠标拖到屏幕最右侧时候,看不到鼠标了(正常应该要能看到鼠标的边缘)。突然在想,会不会是分辨率和屏幕对不上的问题,果断调用了xrandr查看。上图所示(图里面是已经校准过了分辨率),DSI是FIXED_MODE,也就是说一定是800x480,但是HDMI显示却是红色

2021-09-07 14:46:36 2220

原创 关于Qt的QMainWindow、QTableWidget、QComboBox、QScrollArea的widget导致的qss无效问题

问题前阵子比较忙,忘记记录这个问题了。事情是我在写QTableWidget的qss时候,要把下图红色箭头指向的这个边角样式改变时发现的。我发现我对QTabelCornerButton写样式无效。但是我印象里,很早之前也对这个东西写过qss,我记得是生效的,所以花了点心思研究了下。发现煞费心思找到了之前的代码,比对了下并无不同,但是一个qss生效一个无效。所以感觉是QTabelWidget出的问题。以前的QTableWidget是UI Designer直接拉的,而现在的是new出来的。不禁回想起以前的

2021-09-06 10:41:32 1025

原创 Qt关于Linux开机自启程序导致程序的QDir::currentPath不正确问题

开机自启动GUI的问题在arm的linux上写了个开机自启GUI的脚本,自启动后,发现程序初始化的配置目录竟然在用户目录(/home/user),而不是在我的程序目录(/home/user/program),但是我进入程序目录后,手动执行发现初始化的目录位置都是正确的(即当前可执行程序的目录)。但是在Qt程序中,所有的初始化目录我都是用QDir::currentP...

2021-06-25 11:44:57 729

原创 关于Qt碰到的QScrollArea滚动条不出现问题

问题在做仿B站标签创建框时候,用到了ScrollArea,平时这个控件很少用,用的时候也都是UI里面直接拖出来,很少去new。然而就是new的时候发现了个问题。我直接往scroll里丢了一个layout,但是无论我layout怎么撑大,scroll始终没有出现滚动条。所以我试着打印scroll内部的widget的size,结果直接报错。QScrollArea area = new QScrollArea;auto pWidget = area->widget();我发现这个pWidget竟然

2021-06-13 19:41:04 2348

原创 Qt自定义控件-----仿B站标签创建框

B站的标签创建框之前投稿时候,发现B站的标签创建框很有意思,如下图所示。按回车生成标签,点击标签或者按退格删除标签。第一次见到这东西(在下孤陋寡闻),觉得挺有意思,而且挺有用的。趁着端午节假日休闲的下午,把它还原一下。自己的标签框以下是还原效果图还是有挺多缺漏,比如删除和添加时候,滚动条好像没有滚到最合适的位置,不过因为要吃饭了,等之后用到再修改吧。还有按钮的叉叉,实在懒得找图片,所以干脆不搞了。设计思路现在开始写下我还原的思路(这只是我的个人想法,肯定有更好的,不要被局限住了)。首先

2021-06-13 19:24:30 376

原创 Qt自定义控件------SwitchButton

简介SwitchButton是非常普遍实用的按钮,Qt里面竟然没有Switch着实让我惊讶,所以只能自己实现了。效果下面放效果图控件拆分一、控件大体有两部分组成,一个是背景,一个是白色的滑块。原本背景是想用QWidget然后直接设置圆角的,然后发现效果很差。所以背景改成QPainter来绘制,拆分为2个180°的圆弧和一个矩形。二、背景 = 左圆弧 + 矩形 + 右圆弧。有两种做法,一种就是字面上的做法,通过drawArc画两个圆弧,drawLine画上下两条线,然后填充。另外的简单粗暴做法就

2021-06-13 16:29:39 5664 30

原创 关于树莓派的屏幕驱动和触控问题

最近一直在玩树莓派,这边记录下树莓派安装屏幕时候自己遇到的问题。树莓派树莓派型号为树莓派4B,系统为树莓派的32位系统(Debian Buster with Raspberry Pi Desktop),版本号为5.4。屏幕驱动1、买屏幕时,厂家会给你屏幕驱动的地址和安装方法。也就是把驱动压缩包放到/boot目录下。我这边自己是直接把驱动放到SD卡主目录下。2、切换到root用户,直接在当前目录解压。然后进入LCD-show文件夹,查找自己对应的屏幕类型的驱动文件。我个人是5寸电阻屏,所以执行命令:

2021-06-07 16:35:07 7815

原创 关于Qt解析Http和Https链接的文件信息

介绍记录下之前Qt做的解析Http和Https的文件信息的过程。思路Qt这边已经提供了Network给我们解析,所以不是特殊的话,没必要再去找其他库来解决。主要思路是发送请求后,等待触发解析结束的信号,然后接收这个信号去解析里面的内容。同时要获取文件名的话,会有多种情况要去解析。1、网页里面已经写好了Content-Disposition,那么可以直接解析出这个字段来获取filename。2、没有Content-Disposition,那么就去获取它的basename。3、还需要考虑到多级跳转

2021-03-12 09:34:12 1451 3

原创 关于Qt的QScrollArea往里面添加多个子控件时,子控件被压缩的问题

这边的需求是动态往QScrollArea里添加提示控件,结果发现添加太多后导致提示控件变形。如上图,提示控件已经被挤压得看不出原型。使用了setWidgetResizable,发现没啥效果。QScrollArea在初始化完之后里面的scrollAreaWidgetContents也就是里面的Widget已经固定大小了。最后用的方法是每次点击添加时候,重新设置QScrollArea里面的Widget大小,也就是固定死大小。 m_pScrollWidget->setMinimumSize(400

2021-02-12 16:56:49 3301

原创 关于Qt遇到的QSS对QWidget无效的问题

对QWidget界面进行QSS读取时候,发现QSS对QWidget无效???但是我在QWidget里再创建个QWidget时候(简称Q2),把刚才的QSS给Q2,Q2却生效了。这把我的好奇心彻底勾引起来了。首先确定了范围QWidget、StyleSheet。耐着性子花了很长时间把Qt文档都看了下来。在Qt Style Sheets Reference 这个里面,总算讲到了。如果你的类继承了QWidget,那么要想花里胡哨的QSS生效,需要重写绘画事件,且这个类必须加上Q_OBJECT这个宏。更绝的

2021-02-09 21:02:45 891 1

原创 关于设置QMainWindow的QSS问题

在给QMainWindow写QSS加载的时候,发现QSS不生效。但是如果直接在代码中设置SetStyleSheet是可以的,但是会出现很奇怪的现象。setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowStaysOnTopHint);setAttribute(Qt::WA_TranslucentBackground);setStyl

2021-02-06 09:39:01 2756 1

原创 关于QGraphicsPixmapItem背景透明和无法拖曳问题

让QGraphicsPixmapItem和它的相关类背景透明,除了可以设置屏蔽色以外(屏蔽色透明),还有种方法就是在绘制的时候,将画刷先将背景色透明填充然后再绘制。painter.setCompositionMode(QPainter::CompositionMode_Clear); //设置为Clear模式painter.fillRect(XXXX); // 然后用透明填充整个区域painter.setCompositionMode(QPainter::CompositionMode_SourceO

2021-01-29 10:06:20 1112

原创 用Qt模拟刮奖图层

效果思路1、刮奖图层分为两层,一个底层,一个顶层。刮奖的时候,也就是鼠标拖动的时候,将顶层变透明,然后暴露底层。2、要将顶层图片变透明,那么顶层图片必须有Alpha属性。底层无所谓,普通RGB就行,底层也可以不用图片,直接绘制文本就行了。3、鼠标拖动的时候变透明,也就是将鼠标路径变透明,所以需要将画刷设置为Clear模式,将指定图层区域绘画成透明区域。4、刮图层时候,采取画线形式,笔端设置圆点笔帽,看起来比较接近现实。开工1、首先准备顶层图片QImage *mTopImg;mTopImg

2021-01-29 08:53:12 828

原创 关于Qt的无边框窗口移动

唠叨自己花时间分析了下无边框窗口移动过程(本人头脑比较笨),逐个过程解析后,发现思路越来越清晰,这边做下记录。文章比较啰嗦,因为是当做个人笔记。基本移动要做无边框窗口移动,首先是把窗口无边框化。setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowStaysOnTopHint );接着是要重写你要移动的窗口的鼠标事件。要移动,当然要重写移动事件。v

2020-12-31 15:33:15 3146 7

原创 Linux下的热插拔检测

这几天在做Linux的U盘检测,仅限于热插拔。查了很多资料,有用HAL的,UDISK的,还有直接用libusb库的,最后无聊的我选择了用NetLinkSock和udev来接收内核发送过来的信息,从而判断有没有设备接入。#include <sys/socket.h>#include <linux/netlink.h>#include <unistd.h>#include <sys/poll.h>int main(){ const int n

2020-12-24 17:17:03 903 2

原创 记录QTcpSocket碰到的ConnectToHost失败问题

之前尝试Qt的QTcpSocket,发现ConnectToHost失败,waitForConnected一直返回false,一直不得其解,放弃了。直到最近再次使用,仍然是返回false,下定决心要解决这个问题。心血来潮查了QT的文档,发现有个Proxy,心里突然一激动,点开文档进去有个QNetworkProxy。看文档发现代理种类很多,平时默认走DefaultProxy。于是打印了下自己的Socket代理类型。m_sock.proxy().applicationProxy().type();发

2020-12-09 14:35:40 11297 25

原创 关于Quazip的解压操作

之前讲了压缩,又自己捣鼓了下解压。我个人这边是希望解压的时候能指定目录解压,且是在内存中操作,而不是直接全部解压到磁盘中再去读取。解压流程大概如下:#mermaid-svg-eVuEjKY5xCc0quV7 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-eVuEjKY5xCc0quV7 .label tex

2020-11-27 09:48:26 997 4

原创 关于QuaZIP库的压缩使用(多级目录压缩)

最近了解了下Qt的压缩库,发现很多人推荐QuaZIP,自己捣鼓了下,写下笔记。我这边需要的压缩结构大概如下:即多级目录和子文件压缩。首先是创建一个ZIP文件,用到QuaZIP。(以下代码只是大概,没有判断执行是否成功等一些条件,自己写时记得加判断)QuaZip zip("D:\\qua.zip");zip.open(QuaZip::mdCreate);//创建一个zipXXXXXX;zip.close();接着因为要操作ZIP里的文件,所以需要QuaZipFile类。且需要在ZIP里面

2020-11-26 17:04:33 1141 1

原创 关于Qt图像背景透明

在使用QGraphicsItem时候,发现Item背景不是透明的,高级的Item会把低级的覆盖掉,如下图。移动后:查阅文档后发现有个Mask函数指定Mode之后,可以让指定像素变透明或者不透明。根据需求改变Mode。不止QImage,QPixmap同样也有这个函数。QBitmap bmp = pixmap.createMaskFromColor(QColor(255, 255, 255), Qt::MaskInColor);pixmap.setMask(bmp);希望可以帮助到需要的

2020-11-18 18:45:40 1119

原创 Qt关于QGraphicsView和QGraphicsScene坐标系对不上的问题

自己在QGraphicsView(简称View)里添加QGraphicsScene(简称Scene)时,发现两者坐标不一致。大概如上(灵魂画手)。第一次用了Scene的SetSceneRect(x, y, width, height);发现要把Scene的大小设置到和View一样才能坐标系重叠,不符合生产需求。想了许久,为何一定要Scene去靠近View的坐标系呢?有没有可能是在View里设置Scene的坐标。查了下QGraphicsView的文档,发现有个Alignment。可能可行,那就对

2020-11-06 10:17:40 3883 6

原创 关于C++指针删除回收注意点

指针回收分为两个部分,第一部分是删除指针地址所存储的值,也就是delete pointer;第二步就是回收内存,也就是pointer = nullptr;之前回收指针,用的函数去释放。void delp(int *a){ delete a; a = nullptr;}int *a = new int(10);delp(a);这么久了,竟然今天项目崩溃了才发现这个是错的,C++基础太不牢固了。看了下内存地址,创建时:回收后:地址竟然没回收。我知道要传二级指针或者引用了((灬ꈍ

2020-11-04 11:14:59 1890

popup_tool_button.7z

Qt5.14

2021-09-12

空空如也

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

TA关注的人

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