c/c++
东方忘忧
代码改变世界。
展开
-
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 · 337 阅读 · 0 评论 -
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 · 542 阅读 · 0 评论 -
ffmpeg新旧函数对比
5、关于codec问题有的可以直接改为codecpar,但有的时候这样这样是不对的,所以我也还在探索,这里记录一个对pCodecCtx和pCodec赋值方式的改变。原创 2024-07-11 09:40:57 · 496 阅读 · 0 评论 -
Qt进程间通信(QSharedMemory、QLocalSocket、QWebSocket、QProcess、D-BUS、QTcpSocket)
共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。原创 2024-06-12 18:40:29 · 1181 阅读 · 0 评论 -
Qt线程间的同步(QMutex、QReadWriteLock、QSemaphone、QWaitCondition、信号槽)
tryAcquire(int n = 1)尝试获取第n个资源,相当于开启n把锁,开锁成功后返回true,失败返回false,不阻塞。当多个线程同时使用同一个互斥锁时,首先抢到互斥锁的线程将互斥锁上锁,在互斥锁未解锁时,其他线程是不能使用该互斥锁的。:QSemaphore作为QT中的信号量,相当于多把互斥锁,QMutex只锁一次,而QSemaphore能锁多次,且控制多个条件。:告知不同的线程让谁先启动,等待条件变量满足后在启动,条件不满足则进入睡眠等待状态,不会往下执行,卡在wait()语句这一行。原创 2024-06-11 18:21:20 · 887 阅读 · 0 评论 -
Qt事件的详细介绍和原理
1、窗口系统事件spontaneous。2、异步事件PostEvent。3、同步事件SendEvent窗体系统事件spontaneous代表事件有:各类外设事件,如鼠标单双击、滚轮、移动,键盘按键等事件。使用场景:该类事件都是窗体系统进行捕获的,我们一般不需要进行操作,除非我们需要模拟鼠标、键盘的事件。异步事件PostEvent代表事件有:绘图时的update事件。使用场景:不需要马上回应的异步情况下,模拟各种事件。例子://模拟按键点击。原创 2024-06-11 16:41:46 · 829 阅读 · 0 评论 -
Qt判断一个点在多边形内还是外(支持凸边形和凹变形)
算法思想:如果点在多边形内部或者边上,那么点与多边形所有边组成的三角形面积和等于多边形面积。多边形的面积可以用叉积计算即连接坐标原点和各顶点形成向量,所有向量叉积的0.5的和即为多边形面积。算法思想:以被测点Q为端点,向任意方向作射线(一般水平向右作射线),统计该射线与多边形的交点数。算法思想:对于多边形(正向,即逆时针),如果一个点它的所有有向边的左边,那么这个点一定在多边形内部。算法思想:连接被测点与多边形所有顶点所形成的所有角的角度和在精度范围内等于则该点在多边形内,否则在多边形外。原创 2023-10-20 12:06:46 · 908 阅读 · 0 评论 -
Qt求多边形重心
在他的算法基础上翻译为Qt的语言。原创 2023-10-19 17:52:24 · 215 阅读 · 0 评论 -
QT实现凸凹边形等距缩放
5、如果小于等于90度,根据缩放距离、夹角和等间距求缩放后的点位置。7、判断凸凹边形后,根据缩放距离、夹角和等间距求缩放后的点位置。4、根据cosθ大小判断夹角为钝角还是锐角。公式判断多边形为凸边形还是凹变形。1、获取向量AB、BC的坐标。2、计算向量AB、BC的长度。6、如果大于90度,根据。原创 2023-10-17 10:38:35 · 264 阅读 · 0 评论 -
QListView的使用(正逆序插入)
原因是QListWidget它的数据都绑定了一个Item控件,数据较多时,对Item操作就较多。而QListView的数据就只绑定了一个代理,大批量数据操作时,只在代理中绘制这些数据。QListView由于它是模型/视图的结构,所以它的数据交给了QAbstractListModel来处理,它的视图交给了QStyledItemDelegate来处理。//指定起始插入位置插入,该方法一般用于重写InsertRows后调用。//获取指定行列的model项,model项可以用来获取数据。//绘制Index项Ui。原创 2023-08-08 18:44:42 · 893 阅读 · 0 评论 -
sqlite3内存一直增长解决方法
但是有时候你观察sqlite3_memory_used大小没有变,但是通过指令top或者free你发现程序内存在增加且没有回收,这个时候可能只是系统没有对数据库的缓存进行回收,数据库为了能够快速增删改查,它会将数据加载到缓存中来进行提速。执行了sqlite3_prepare_v2和sqlite3_step后的sqlite3_stmt 指针需要回收,回收方法调用sqlite3_finalize。sqlite3_exec中的错误消息指针zErrMsg 需要回收,回收方法调用sqlite3_free。原创 2023-06-01 15:20:39 · 1264 阅读 · 0 评论 -
configure: error: cannot run C compiled programs
造成这个的原因就是sudo惹的祸,因为使用sudo命令进行安装的时候,改变了安装的工作环境,就是切换到了root用户下的环境进行安装,而root用户与普通用户的环境是不一样的。当我们使用交叉编译时提示configure: error: cannot run C compiled programs的错误,这个时候就是你没有指定具体的交叉编译环境。以上写法就可以实现configure和make成功了,但是你在sudo make install的时候可能还是会提示错误,如提示以下错误。原创 2023-04-27 17:00:19 · 5365 阅读 · 0 评论 -
两点经纬度计算距离
【代码】两点经纬度计算距离。原创 2023-04-20 13:08:26 · 197 阅读 · 0 评论 -
获取U盘盘符名称(U盘设备名)
然后使用grep "^/dev/sd"从众多存储设备中找到sd开头的设备,因为U盘名称一般为sda1,sda4,sdb1等等。基于Qt图形库实现的获取u盘名称的函数。命令行输入df查询所有存储设备。原创 2023-03-30 16:40:20 · 1924 阅读 · 0 评论 -
Qt下的8字节转6字节,转4字节,2字节。
8字节转为其它字节,将它以二进制的形式在字符串中记录,如12的二进制为0000000100000010,如果将它转为4字节,就是每个字节取末尾4个bit(小端情况下),然后记录到字符串中为“00010010”,这样就将所有的字节以二进制数据存到字符串中了,我们需要哪段就取哪段。在开发协议这块时,为了寻找一个快速的8字节转换其它字节的方式,百度许久也没有一款简洁好用,并且在Qt中也好调用的方法,所以设计出了以下方法,该方法支持8字节转为任意指定的字节长度。原创 2023-03-02 17:01:35 · 635 阅读 · 0 评论 -
Qt进程通信之共享内存(QSharedMemory)
比如单机上只有一个实例,该实例需要在启动的时候加载一大块资源到内存,那么,如果基于共享内存,将资源加载到共享内存,那么,下次启动的时候,只要version或者crc没变,就可以直接挂载使用,无需再次读入。比如程序启动需要加载cpu型号、内存信息、系统属性、配置文件数据等等时,软件第一次启动时先将数据加载到共享内存,后面启动时只需要从共享内存读取数据,提升程序的启动速度。两个进程同时挂载一片共享内存,进程A写、进程B读,就达到了通信效果,这种方案的好处是,读写都是基于内存操作,效率非常之高。原创 2023-02-27 15:28:35 · 3556 阅读 · 0 评论 -
xdotool按键模拟(linux)
搜索窗口并进行操作:例如搜索Beyond Compare窗口进行移动。多按键模拟:点击Shift+a。多按键模拟:长按Shift+a。模拟鼠标相对当前位置移动在点击。模拟鼠标每隔2秒左击一次。单按键模拟:点击按键a。单按键模拟:点击按下a。单按键模拟:点击松开a。多按键模拟:点击a+b。模拟鼠标右键按下和抬起。模拟鼠标左键按下和抬起。click后面参数含义。原创 2023-02-24 18:24:06 · 1551 阅读 · 0 评论 -
QDateTime的11种显示方式
QDateTime datetime = QDateTime::currentDateTime();datetime.toString(“hh:mm:ss\nyyyy/MM/dd”);datetime.toString(“hh:mm:ss ap\nyyyy/MM/dd”);datetime.toString(“hh:mm:ss\nyyyy-MM-dd”);datetime.toString(“hh:mm:ss ap\nyyyy-MM-dd”);datetime.toString(“hh:mm\nyy原创 2023-02-20 15:25:35 · 1343 阅读 · 0 评论 -
QMap的升序排序,巧妙避开默认排序规则。
通过以上规律当我们需要顺序排序时,就不要将key值的类型定义为QString、QByteArray等字符串类型,而需要定义为int型。可以看出多个字符的key值,首字母排序后,如果首字母相同,则从第二个字母按照ASCII顺序来排序。从插入规则,对照ASCII码表不难看出map的排序都是按照key值首字母的顺序来排序的,结论:QMap的升序排序是指对key值的首字母的Ascii码顺序来确定的。以下通过一个示例来看看QMap怎么排序的。原创 2023-02-07 14:09:07 · 3093 阅读 · 0 评论 -
Qt BCC异或校验、LRC纵向冗余校验、CRC循环冗余校验
将每个字节数据求和结果与256求余,再按位取反加 1(256 - 余数)后即得到校验码。在工业领域Modbus协议Ascii模式采用该算法。将每个字节数据(一般是两个16进制的字符)进行异或后即得到校验码。适用于大多数要求不高的数据通讯,像很多单片机系统的串口通讯。原创 2023-02-01 16:22:24 · 1290 阅读 · 0 评论 -
Qt opencv编译详细教程
4、安装cmake后,在QtCreator中添加cmake。库,我这里下载的是opencv-3.3.1版本。软件,Qt的环境安装部署,这里不做介绍。原创 2023-01-16 14:51:14 · 3193 阅读 · 0 评论 -
ubuntu下使用QMediaPlayer闪退。
在新装的ubuntu进行移植或者首次安装Qt的编译环境,当我们的Qt项目中存在使用QMediaPlayer对象的时候,会出现莫名其妙的闪退现象,就是找不到什么原因,qt又没有具体提示,这个时候你打开视频,会发现打开不了。经过仔细研究发现是缺少相关的视频库文件,这个时候我们安装一个视频软件,让这个软件自动把这个库进行安装。我安装的是VLC播放器。安装完毕后,我再次编译项目,执行程序,发现没有崩溃了。原创 2023-01-13 21:59:30 · 677 阅读 · 0 评论 -
qt压缩解压文件夹
通过的QZipWriter的addFile来实现的。第一步:pro文件中添加 QT += gui-private第二步:头文件中添加:#include <QtGui/private/qzipreader_p.h>#include <QtGui/private/qzipwriter_p.h>第三步:cpp文件中实现:bool zipDir(const QString& dirPath,QString SavePath){ bool ret;原创 2022-04-20 13:48:36 · 5733 阅读 · 18 评论 -
QT数据库的插入、更新、删除、查看的五种写法
当然像更新,删除,查看都是一样的,如下各举一个例子,其它四种方法跟插入的写法一样。先打开数据库,然后将QSqlQuery和QSqlDatabase绑定。QSqlQuery被绑定后,就能使用sql指令的增删改查了。当前方式仅支持QT的封装库QSqlQuery来调用。原创 2022-12-08 16:32:14 · 4577 阅读 · 0 评论 -
去掉libpng warning: iCCP: known incorrect sRGB profile
步骤1:下载ImageMagick Display(网上也可以搜索下载ImageMagick),下载完毕后将ImageMagick安装到E:\Programs目录下面,如果Programs不存在则创建一个。步骤2:创建脚本ImageMagick-Fix-PNG.bat,编写执行脚本步骤三:进入到图片目录,将ImageMagick-Fix-PNG.bat拷贝到图片目录,然后打开cmd进入到图片目录,执行脚本,如下图,等待“请按任意键继续”的文本出现,这时已经执行完毕。原创 2022-12-08 10:43:02 · 854 阅读 · 0 评论 -
QNetworkAccessManager、QNetworkRequest和QNetworkReply与http通讯
QNetworkAccessManager、QNetworkRequest和QNetworkReply三者关系:QNetworkAccessManager是主体,它负责发送和接收,也就是get和post,并且他还能判断网络连接状态,通过networkSessionConnected信号判断。QNetworkRequest是请求,它是要访问的内容,并且它也能对这些内容进行配置,它放在QNetworkAccessManager的get和post中使用。QNetworkReply它是回复既返回结果,它能获取原创 2022-12-07 15:28:21 · 2701 阅读 · 0 评论 -
QT+FFmpeg播放音视频简单版
【代码】QT+FFmpeg播放音视频简单版。原创 2022-12-01 12:58:06 · 750 阅读 · 0 评论 -
QT+FFmpeg播放音视频,且支持音视频同步。
当前音视频同步逻辑:首先ffmpeg中音频比视频解码慢,如果没有延迟的情况下,视频比音频快很多。我这个地方开了三个线程,音频线程没有延迟,所有会在视频播放过程中,将所有音频解码完毕,并将每帧对应的音频数据和当前帧数分别存入一个链表中。然后在音频播放线程中,会从链表取一个periodSize大小的数据,在取得过程中会记录当前取到哪一帧数据了,然后将periodSize大小的数据写入输出设备进行播放,这样,我们能够知道当前音频数据具体播放到哪一帧了。线程2:ffmpeg音频解码。线程3:播放每一帧音频。原创 2022-12-01 11:41:55 · 2942 阅读 · 0 评论 -
Ubuntu20.4系统隐藏顶栏
它们都是gnome-shell-extensions的扩展模块,想要使用这个扩展模块,首先需要安装gnome-tweak-tool或者gnome-shell-extensions,安装完成这个扩展工具后,在安装模块。(注:20.4以上的版本到上一步就可以隐藏顶栏了,Ubuntu20.4的版本还需要如下设置,否则一些特殊情况仍然会出现顶栏,例如切换分辨率等操作)安装好autohidetopbar或者dash-to-panel后,在同时点击Alt+F2组合键,点击enter确认,模块加载成功。原创 2022-11-22 17:16:00 · 7427 阅读 · 2 评论 -
qt获取cmd系统指令返回值的三种方法,支持windows和linux
这里通过QProcess信号槽来实现异步的获取返回值,使用start()来执行才行,如果你用startDetached()执行会把进程分离出去,是无法获取它的状态的。注意,这里有一个坑,qt无法执行带管道"|“和重定向”>>"的linux指令,需要写入脚本的方式来执行。这里介绍三种不同获取cmd指令的方法,且都支持windows和linux。waitForStarted()默认30s,设置-1会一直等待执行完毕。这里提供了带管道和不带管道的linux指令执行方法。这里提供两种不同写法。原创 2022-11-17 14:03:14 · 4360 阅读 · 3 评论 -
Linux系统中Qt程序指定位置加载库文件的四种方式
首先进入/etc/ld.so.conf这个目录中,然后创建一个.conf文件,然后调用ldconfig。(全局所有用户都配置,也是在profile文件中添加环境变量)方法四;添加完毕后调用指令source /etc/profile来生效。调用ldconfig后有弹出xxx不是符号链接这个没有影响。这种方式在终端退出后就会失效。原创 2022-11-16 10:47:40 · 3244 阅读 · 0 评论 -
linux qt程序移植之关联库打包
方案二:编译QT源码并配置该环境到Qt Creater上,在QT环境下编译程序,这样程序链接的库路径就在该源码位置,然后移植程序时,只需要在移植的系统上创建对应的源码库路径,最后将需要的库文件拷贝到移植的系统位置即可。这样就能将所有第一层的库文件拷贝到Mylib文件夹下了,当然可能会存在库文件关联库文件,这个时候,就需要使用ldd查看后,我们手动再次拷贝了。方案三:使用ldd查看程序关联的所有库文件,然后将所有库文件进行拷贝到移植的系统位置。这里提供一个批量拷贝库文件的脚本。原创 2022-11-15 15:12:30 · 835 阅读 · 0 评论 -
qt中avcodec_find_decoder为null
发现问题没,我们编译好ffmpeg的包后库文件名称都是带后缀的,我们很容易就直接拿来用,而且编译器偏偏又能编译过,这就比较坑了。所以以后凡是库文件,一定要去掉它的后缀。今天就遇到avcodec_find_decoder为null的问题,原因之一就是数据库的链接错误,而且这个错误很低级,但很难看出来,下面两张对比。你会发现库的版本号不对,但是你会发现链接的同一个库文件,版本却不对。在qt中编译ffmpeg时经常会用到LIBS来链接数据库。原创 2022-09-02 18:59:06 · 1377 阅读 · 0 评论 -
curl下载示例
curl两种下载方式。原创 2022-06-28 10:02:47 · 1092 阅读 · 0 评论 -
qt 大文件生成md5校验码
大文件生成md5校验码原创 2022-06-26 12:56:35 · 909 阅读 · 0 评论 -
qt base64加解密
这里提供两种加解密的方法。第一种方法:使用QByteArray的toBase64和fromBase64来实现。第二种方法:使用base64.cpp文件中的base64_encode和base64_decode来实现。代码示例如下:.cpp原创 2022-06-26 12:37:14 · 1944 阅读 · 0 评论 -
qt QProgressBar渐变滚动条
实现渐变滚动条,使用样式实现:三种渐变样式:qlineargradient(线性渐变颜色设置),qradialgradient(辐射渐变),qconicalgradient(圆锥形渐变)。详情。这边实现如下:效果:具体代码:.h.cpp...原创 2022-06-08 18:34:33 · 3674 阅读 · 0 评论 -
QWebSocket从ws切换到wss
1、Qt自带的老版本OpenSSL1.0.x在今年(2019)就要结束LTS支持了,从(5.12.4)开始Qt将启用1.1.x,新版本带来的TLS1.3,以前的libeay32.dll和ssleay32.dll变成了libcrypto-1_1.dll 和libssl-1_1.dll。将OpenSSL 32位的bin目录里的 libcrypto-1_1.dll 和 libssl-1_1.dll 拷贝到自己qt路径下mingw73_32\bin 下面(用什么qmake构建,就放在qmake对应的bin路径下)原创 2022-06-01 20:01:25 · 1688 阅读 · 5 评论 -
qt中使用curl访问https,跳过证书检查。
当使用curl访问url时,提示:error no:Peer certificate cannot be authenticated with given CA certificates的错误,一般都是不支持该https对应的证书。解决方法如下: curl_easy_setopt(pCurl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_easy_setopt(pCurl, CURLOPT_SSL_VERIFYHOST, 2);原创 2022-05-30 18:04:36 · 2606 阅读 · 0 评论 -
qt 数据库增加字段且版本兼容
数据库使用过程中经常会出现需要增加新的字段,这个时候又要兼容旧的版本。我们增加字段往往用到“ALTER TABLE tablename ADD COLUMN 字段名 类型”的sql语句,而在qt中增加字段除了这个语句还需要几个类的配合,QSqlDatabase、QSqlError、QSqlQuery、QSqlRecord、QSqlField。QSqlDatabase用来连接数据库,获取表数和表名;QSqlError用来sql的执行错误;QSqlQuery用来执行语句和获取执行后的结果;QSqlRe原创 2022-05-23 10:56:29 · 945 阅读 · 0 评论