- 博客(170)
- 资源 (18)
- 收藏
- 关注
原创 QT的QScrollBar滚动条难以拖动(拖动不顺畅)
观察这个qss样式,就能发现我把滑倒的宽度从width设置更改成了min-width的设置方式,这样就顺畅了,并且也不影响qss效果。horizontal水平类型滚动条同比vertical垂直类型。以上这个问题,我屏蔽qss的handle滑块或者vertical滑道,发现就流畅了,由此可见不顺畅的原因肯定跟这个有关。首先我们先看一个上面的qss样式,这个样式应用后,控件当前窗口只能显示10行,但有11行的时候,就会出现滚动条难以拖动,但是到12行就又很顺滑了。
2025-03-03 20:16:36
148
原创 QT MD5校验文件和数据的完整性
QCryptographicHash,是 Qt 框架中提供的一个类,它用于实现加密散列函数,也就是我们常说的哈希函数。哈希函数能够将任意长度的数据转换为固定长度的哈希值,这个哈希值通常用于数据的完整性校验、密码存储等场景。支持:MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512,这些算法被广泛认为是安全的。通过对比信息的MD5值,可以验证信息在传输过程中是否被篡改。在很多操作系统中,用户的密码通常是以MD5值的方式保存的,用于验证用户密码的正确性。
2025-02-25 11:15:02
381
原创 QT全局所有QSS样式实时切换
通过以上源码我们能看出在qApp的setStyleSheet中会拿到所有控件,清除旧的样式,然后加载新的样式,做到全局所有控件样式的动态切换。为什么qApp->setStyleSheet(qss);可以做到全局所有样式实时切换,我来看下setStyleSheet的源码。
2025-02-07 09:53:10
282
原创 QT通过setProperty设置不同QSS样式
如上切换效果就是通过setProperty来实现切换不同颜色的。第二步,需要调用对应控件的setProperty。实现以上效果第一步,需要在QSS中做属性处理。
2025-02-07 09:24:40
411
原创 QGraphicsPixmapItem设置的图片空白处无法点击
通过调用QPixmap::mask()来确定形状。此形状仅包括像素图的不透明像素。然而,由于形状更复杂,它可能比其他模式慢,并且使用更多的内存。通过调用QPixmap::createHeuristicMask()来确定形状。性能和内存消耗与MaskShape相似。形状是通过追踪像素图的轮廓来确定的。这是最快的形状模式,但它不考虑像素图上的任何透明区域。
2025-02-06 14:44:52
180
原创 linux arm下获取屏幕事件(rk3588)
我的屏幕设备是ILITEK ILITEK-TP,它的设备名称是event1.1、找到屏幕设备名称。
2024-12-02 09:39:58
305
原创 gdb编译教程(支持linux下X86和ARM架构)
5、我们先开始x86版本,这个比较简单,不需要配置交叉编译工具(当然前提是系统装了gcc和g++的环境啊)。将gdb文件拷贝到对应平台下,即可使用。(或者使用gdbserver远程调试)以上这些配置都是要跟在./configure后面的。3、解压,然后进入到目录下,打开当前目录的命令行窗口。2、下载完后拷贝到linux的x86系统。先清理下编译x86残留下的临时文件。6、限制我们来编译ARM版本。4、创建一个生成目录。我下载的8.2版本。
2024-11-12 13:35:26
837
原创 Qt生成coredump文件(支持arm和x86架构)
coredump一般都在执行文件崩溃时自动生成的,用来定位造成程序崩溃的原因。ubuntu下的设置coredump步骤(linux的x86架构)1、正常情况下coredump生成路径需要在root权限下才能设置生效,所以我们需要进入root模式。sudo su2、设置coredump生成路径。%%单个%字符%p代表dump进程的进程ID%u代表dump进程的实际用户ID%g代表dump进程的实际组ID%s导致本次core dump的信号。
2024-11-12 11:22:54
731
原创 Qt Udp的组播(多播)、广播和单播
单播的数据只是收发数据的特定主机进行处理,组播在特定组之间进行处理,而广播的数据整个局域网都进行处理。3,管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。1,局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。面向报文:UDP以独立的数据报形式发送数据,每个数据报都是独立的,并且保留了数据的边界。
2024-11-08 14:46:37
1469
原创 Qt源码编译
所以当我们项目中需要用到5.15以上的版本时,只能自己对源码进行编译来生成一个环境了(Qt提供了在线升级,但是在线升级中没有MinGW版本了)重要:有些模块编译能否成功需要关联库,如果我们不需要这些模块,我们可以跳过这些模块,但是构建失败提示的模块内容往往不是我们需要跳过的名称。从一层层目录中我们找到了对应的模块,这个时候我们想要跳过这个模块,就可以带qt3d这个名称达到跳过的效果(-skip qt3d)。源码编译好后,你会发现创建一个项目并不能直接用,我们需要配置对应的环境。
2024-10-28 17:50:04
1069
原创 QMqtt的使用(从mqtt库到demo验证)
编译完成后发现include中没有文件。这个时候我们可以从qmqtt中把头文件拷贝过来。记得从qtmqtt-5.12.2/src/mqtt中拷贝头文件到include中。2、下载QMqtt源码后解压,在QtCreator中打开。我们需要将qmqtt头文件拷贝到Qt的环境目录下。5、然后再次编译,发现可以编译通过了,如下做验证。1、是下载跟自己Qt版本差不多的QMqtt源码。如果不清楚自己Qt版本,可以再选项中查看。然后找到比较接近的或者对应版本。指定下生成目录,然后构建。4、开始编译demo。
2024-10-15 13:04:13
518
原创 SIMCOM-A4767C-4G模块ARM开发板上网配置流程
5、启动网卡eth2(我这边是eh2,你自己的叫什么可以用ifconfig -a)4、等待1分钟直至4g模块灯闪烁,表示重启成功,且sim卡加载成功。判断下,是不是1(ECM模式),如果是1,就不用动,如果不是1,就。3、设置ECM模式,回复OK表示设置成功。你会发现多了eth2的设备,这个设备就是未启动的4G网卡设备。以上网络就配置成功了,当前设备可以正常访问网络了。7、ping百度,测试网路是否正常,如下则正常。2、设置网络模式,回复OK表示设置成功。1、打开串口,会进入编辑模式。查看所有eth设备。
2024-09-13 16:17:23
689
原创 QCombobox下拉选项挤在一起
如上图所示QCombobox如果挤在一起,一般原因是在设置QCombobox样式前设置了全局QSS样式。(经测试同一Qt版本在windows系统是没有这个问题的)
2024-08-15 11:13:50
319
原创 ffmpeg新旧函数对比
5、关于codec问题有的可以直接改为codecpar,但有的时候这样这样是不对的,所以我也还在探索,这里记录一个对pCodecCtx和pCodec赋值方式的改变。
2024-07-11 09:40:57
606
原创 QT实现多摄像头监控
2、在del camera后选择一个对应IP后,点击del会自动删除对应摄像头的显示,且整体布局会自动调整。1、在add camera后面输入对应摄像头的IP后,点击add会自动布局显示。
2024-06-17 15:51:52
1360
2
原创 Qt进程间通信(QSharedMemory、QLocalSocket、QWebSocket、QProcess、D-BUS、QTcpSocket)
共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。
2024-06-12 18:40:29
1426
原创 Qt线程间的同步(QMutex、QReadWriteLock、QSemaphone、QWaitCondition、信号槽)
tryAcquire(int n = 1)尝试获取第n个资源,相当于开启n把锁,开锁成功后返回true,失败返回false,不阻塞。当多个线程同时使用同一个互斥锁时,首先抢到互斥锁的线程将互斥锁上锁,在互斥锁未解锁时,其他线程是不能使用该互斥锁的。:QSemaphore作为QT中的信号量,相当于多把互斥锁,QMutex只锁一次,而QSemaphore能锁多次,且控制多个条件。:告知不同的线程让谁先启动,等待条件变量满足后在启动,条件不满足则进入睡眠等待状态,不会往下执行,卡在wait()语句这一行。
2024-06-11 18:21:20
1035
原创 Qt事件的详细介绍和原理
1、窗口系统事件spontaneous。2、异步事件PostEvent。3、同步事件SendEvent窗体系统事件spontaneous代表事件有:各类外设事件,如鼠标单双击、滚轮、移动,键盘按键等事件。使用场景:该类事件都是窗体系统进行捕获的,我们一般不需要进行操作,除非我们需要模拟鼠标、键盘的事件。异步事件PostEvent代表事件有:绘图时的update事件。使用场景:不需要马上回应的异步情况下,模拟各种事件。例子://模拟按键点击。
2024-06-11 16:41:46
884
原创 浅谈QT的几种线程的使用和区别。
线程是操作系统中的基本执行单元,是一个独立的执行路径。每个线程都有自己的栈空间,用于存储本地变量和函数调用的上下文。多个线程可以在同一进程中并发执行,从而实现并发处理,提高程序的性能和响应能力。与进程不同的是,线程是轻量级的,它们共享同一进程的地址空间,这意味着它们可以访问相同的内存和文件资源,从而更容易地共享数据和通信1、QThread。2、QObject+moveToThread实现。3、QThreadPool+QRunnable实现。4、QFuture+QtConcurrent实现。5、st
2024-02-04 17:35:23
2510
原创 QT自定义控件0-360°刻度尺
直接上代码,可以直接用,使用的paintevent事件实现的,没啥好讲的。支持0到360°,360到0°的过度。
2024-01-19 10:29:18
836
原创 QGraphicsItem实现不随场景缩放而缩放,支持任意图片,图形,文字。
的博客中讲解过通过painter->matrix().m11()获取缩放比例,然后对这个比例做处理来实现不随场景的缩放而缩放,但是也留了一个问题,那就是对于文字和不规则图形都没法实现不随场景的缩放而缩放。将要绘制的所有图形都先按照正常的比例进行绘制,绘制的画布设置为图片,这样相对于绘制了一张图片。然后将这张图片按照缩放比例来进行绘制。经过一段时间的研究用到另外一种方式来实现了不随场景缩放而缩放的功能,且支持任何图片,图形,文字。思路还是来源于我之前写的一篇文章的。
2023-12-19 15:58:58
843
原创 Qt提升绘制效率,绘制加速。
通过以上两个场景,得出结论,不管是绘制多个或者逻辑复杂的静态图形还是绘制多个动态图形时,都可以通过生成图片的形式来提升绘制效率。:我们绘制多个静态图形和绘制一张图片哪个更快。很明显绘制多个图形的时候要慢很多。所以我们将多个图形变成一张图片就能实现加速。在我们绘制一些复杂逻辑且数据量巨大的图形时,经常会出现流畅性问题,本文就是来进行讲解如何提升绘制效率的。但是将多个动态图形绘制成一张图片,我们可以控制图片生成速度来减少cpu。:绘制多个动态图形和将多个动态图形变成多张图片,效率还会有提升吗?
2023-12-12 11:44:11
1367
原创 Qt触摸屏双指缩放和单指移动界面(支持嵌入式设备)
2、在event事件管理器中接收触摸屏的三个事件,TouchBegin、TouchUpdate和TouchEnd。6、如果是单点触摸,通过比较手指放上去的位置和手指拖动时的位置来设置界面滚动条的位置。4、如果多点触摸,通过比较前后两次两点间触摸位置来判断是放大还是缩小。5、多点触摸时,会存在抖动情况,需要做防抖处理。3、判断单点触摸还是多点触摸。1、首先需要打开触摸屏功能。
2023-10-24 15:56:17
6181
6
原创 Qt判断一个点在多边形内还是外(支持凸边形和凹变形)
算法思想:如果点在多边形内部或者边上,那么点与多边形所有边组成的三角形面积和等于多边形面积。多边形的面积可以用叉积计算即连接坐标原点和各顶点形成向量,所有向量叉积的0.5的和即为多边形面积。算法思想:以被测点Q为端点,向任意方向作射线(一般水平向右作射线),统计该射线与多边形的交点数。算法思想:对于多边形(正向,即逆时针),如果一个点它的所有有向边的左边,那么这个点一定在多边形内部。算法思想:连接被测点与多边形所有顶点所形成的所有角的角度和在精度范围内等于则该点在多边形内,否则在多边形外。
2023-10-20 12:06:46
987
原创 QT实现凸凹边形等距缩放
5、如果小于等于90度,根据缩放距离、夹角和等间距求缩放后的点位置。7、判断凸凹边形后,根据缩放距离、夹角和等间距求缩放后的点位置。4、根据cosθ大小判断夹角为钝角还是锐角。公式判断多边形为凸边形还是凹变形。1、获取向量AB、BC的坐标。2、计算向量AB、BC的长度。6、如果大于90度,根据。
2023-10-17 10:38:35
290
原创 Qt5和Qt6的区别
之前有做过将项目从QT4迁移到QT5的操作,所以写了一篇QT4和Qt5的区别。在最近这一年接触过Qt6后,所以想要介绍一下Qt6和Qt5的区别,通过自己的试用感受和结合网上各路大佬的点拨,有了一个大概的了解。
2023-09-19 18:28:11
14572
原创 Qt自定义QSlider(支持水平垂直)
Qt本身有自己的QSlider,为什么我们还要自定义实现呢,因为Qt自带的QSlider存在一个问题,当首尾为圆角时,滑动滚动条到首尾时会出现圆角变成矩形的问题。当然如果QSS之间的margin和滑动条的圆角控制的好的话是不会出现这个问题的,但是我们一般都是按照美工设计来完成工作的,如果她的设计是必须一摸一样的话,这个margin和圆角配合不了出现以上问题的话,那我们就需要实现一个自定义的QSlider了。4、配合resizeEvent事件来实现自适应大小。3、配合mouse鼠标事件实现拖动功能。
2023-09-12 18:16:41
978
原创 QListView的使用(正逆序插入)
原因是QListWidget它的数据都绑定了一个Item控件,数据较多时,对Item操作就较多。而QListView的数据就只绑定了一个代理,大批量数据操作时,只在代理中绘制这些数据。QListView由于它是模型/视图的结构,所以它的数据交给了QAbstractListModel来处理,它的视图交给了QStyledItemDelegate来处理。//指定起始插入位置插入,该方法一般用于重写InsertRows后调用。//获取指定行列的model项,model项可以用来获取数据。//绘制Index项Ui。
2023-08-08 18:44:42
974
原创 QT实现中英文键盘
将字体库加载到一个Hash容器,字母和拼音作为key值,对应的中文作为value值。使用Qt中实现中英文键盘,支持各种linux嵌入式设备。
2023-08-02 14:47:24
1084
2
原创 QTableWidget逆序插入(高性能插入)
当然我们正序的时候也可以用insertRow来实现,所以它跟setRowCount有什么区别,经过实际测试,我发现当数据量较大时,insertRow比setRowCount快很多,当然想想它的源码逻辑也能猜测到insertRow要快很多,因为setRowCount它需要先遍历操作找到第一条插入行,然后新增。通过以上的例子,是不是发现了正序和逆序它们操作方式不一样。正序是通过setRowCount来增加行的,逆序是通过insertRow来增加行的。但是逆序还需要更新编号和反向取数据。逆序插入删除选中行。
2023-07-26 18:32:32
748
原创 QT之自定义表格控件
继承QWidget来绘制的一款自定义控件,设计原因是因为Qt自带的QTableWidget的大批量操作很卡,特别是在嵌入式设备上时。2、支持各种颜色,字体,行列数设置。1、支持拖动自适应。
2023-07-20 15:09:54
858
原创 QT日志调试系统(前台、后台、文件查看调试信息)
通过qInstallMessageHandler获取Qt的打印信息,将这些打印信息存放到一个Widget中,实现不通过后台就能查看日志信息。
2023-07-20 10:42:06
635
原创 Qt 蓝牙实现连接
8、什么是透传模式,蓝牙分为两种模式,分别是透传模式和AT模式,透传模式就是蓝牙与蓝牙之间需要进行通信时设置的。发送数据完毕后,退出透传模式到AT模式,然后通过AT指令进行其它需要的操作。3、蓝牙与蓝牙之间的通信方式这个我们不用管,我们只需要分别配置两块板,让主机能够扫描到从机。1、蓝牙模块在嵌入式设备上是通过串口连接,这样我们跟蓝牙进行交互是通过串口进行交互的。2、蓝牙一般是两板,一般是主机和从机,每块板跟嵌入式核心板都是通过串口进行通信的。4、蓝牙板跟嵌入式核心板它们之间的通信协议是AT指令集。
2023-07-07 19:26:33
4746
1
原创 QT中代码设计和.ui文件设计的区别
但是在.ui中需要使用这个QWidget,我们需要把它进行提升,但是提升了后就会出现一个问题,Qt的提升是针对整个软件的,当我们存在两个项目时,你会发现所有提升的控件在所有的项目中都可以看到,如果项目1使用了项目2的提升控件就会出现编译问题,还有当项目1和项目2存在相同名称的QWidget都需要变成提升控件时,这个时候就会冲突了,会被覆盖。.ui文件的实现更快,但是代码很长,当然有好处有坏处,好处是ui_widget.h它里面支持了翻译功能,坏处是它的编码这块无法调整。1、难以跨编码不同的平台。
2023-07-06 11:12:00
1632
原创 QSS QCalendarWidget
知道了每个 widget 后,就可以像下面这样用 QSS 修改 QCalendarWidget 的样式了。以上QCalendarWidget各按键名称都是参考Qt源码的。
2023-06-25 16:17:18
1265
QListView封装类,不用重新写QAbstractListModel和QStyledItemDelegate
2023-08-09
Qt中的QTcpSocket、QWebSocket和QLocalSocket
2023-03-07
VHF 水上移动频带内使用时分多址的自动识别系统的技术特性
2023-03-03
将SVG矢量图显示在Qt的QGraphicsView视图框架上
2023-01-16
修复图片libpng warning: iCCP: known incorrect sRGB profile问题
2022-12-08
S57电子海图源码,将.000转成.cds来实现的
2022-11-10
这里提供两种加解密的方法。 第一种方法:使用QByteArray的toBase64和fromBase64来实现。 第二种方法:使
2022-06-26
1、QWebchannel使用。2、QWebsocket使用。3、jsoncpp使用。
2022-02-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人