- 博客(251)
- 资源 (14)
- 收藏
- 关注
原创 Qt 集成VTK
Qt的debug模式需要加载VTK的debug库,同样 release模式需要加载release库。不然会出现这个错误“QWidget: Must construct a QApplication before a QWidget”。4. 我们以显示一个stl文件为例。
2024-04-23 09:10:41 385
原创 windows下利用NSIS制作安装包
经过程序员抓耳挠腮的开发,应用终于开发完毕了,那接下来无论发布给客户还是给测试,最好的方式时打一个安装包,直接给release文件夹,就显得不太专业了。1,我们以一个QML程序为例,新建一个pkg/v1.0.0/bin文件夹,并将 release版本的pkgTest.exe拷贝到这个bin文件夹下。选择目录这一步很关键,把自带的两个删掉,然后指定我们的主程序的父目录,也就是bin文件夹。),自己可以根据业务需要去下载,并且它本身也有大量的指令,可以支持更高的定制化需求。2,用第三方打包软件,制作安装包。
2024-04-23 09:00:00 321
原创 QML与C++交互
QML写界面,业务逻辑使用C++,既能快速的开发界面也能利用C++的强大生态,这是目前比较被认可的方式,那就涉及到QML与C++对象的交互。上述方式相当于同步的方式调用C++中的函数,还可以异步的响应C++中的信号,相当于QML中的槽与C++中的信号进行绑定。点击登录 ,如果密码或用户名错误会将C++的状态信息,实时的显示到左上角的QML Text控件中。我们以登录例子来说明,页面点击登录,将信息传递到c++ http对象进行密码的验证,然后返回登录结果。//调用C++对象中的函数。
2024-04-22 14:33:24 469
原创 爬取微博热搜榜
打开收,按F12获取网页源码,然后ctrl+hift+c 选择想要爬取的元素,右侧会定位到数据位置。位于 pl_top_realtimehoe 下的 table下的tbody下的tr下的td[2]爬虫的步骤 获取网页数据-》分析网页数据-》提取网页数据。利用python和xpath爬取微博热搜榜。再看链接,跟内容是同一个元素。1,首先获取微博热搜数据。3,利用xpath提取数据。我们想要内容和链接。
2024-04-07 10:44:40 233
原创 客户端日志模块分析
写了多年的软件,用了众多的日志模块,发现基本的功能是差不多的,结合网上一个大佬自己的写的日志模块,分析下其实现的方式。可以在配置文件中设置,大于设置的才会打印出来。一般日志模块是全局使用的,都会写成单例。在调用的时候会用宏,封装一下。命名,文件大小或者行数 属性必不可少,命名一般按照日期,大小或者行数有默认的设置。初始化时,主要是文件创建,内存开辟,如果时异步 则开一个线程循环从队列取内容。日志存储在哪里,已经命名方式。以上两点,绝对日志存在哪里,叫啥名字,多大限制。主要看两个部分,一是初始化,一是调用。
2024-03-18 15:51:20 332
原创 基于C++的反射功能
类似与这种流程图,有很多算子,我在注册的时候,将算子的类名作为参数,拖拽结束后,获取类名字符串,自动创建对象。利用C++的发射机制,实现根据字符串创建实例对象。类实现的时候,进行注册。构造的时候,没办法传参。
2024-03-12 17:25:06 234
原创 基于Qt 和python 的自动升级功能
1,服务端使用python3.7 ,搭配 fastapi 和uvicorn 写一个简单的服务,开出一个get接口,用于客户端读取安装包的版本,描述,和路径。1,客户端是一个 QDialog,每次启动时 从服务端获取最新的版本号,大于则开始下载安装包,下载完成后,则执行安装包。json文件长这个样子,每次客户端都解析这个文件,如果最新的版本大于当前的版本,则从url下载文件,并自动执行文件。2,使用的时候 将客户端放到main函数中,并传入当前的版本号。公司内部的一个客户端工具,想加上一个自动升级功能。
2024-03-12 11:38:48 517
原创 iperf 测试网卡带宽
自己在ubuntu上写了一个udp程序,但是延时很大。用iperf测试下实际带宽能达到多少。反过来,linux作为服务端,windows客户端,可以看到输入的数据。2,要确保 windows 端 和linux 端 版本一致 才能通讯。发现linux 大概以每秒900M左右的带宽在输出。5,nload eth0 看下网卡的接收 和发送。1,iperf 指令有大量参数,可以根据需求配置。3,windows 作为服务端运行。4,linux 作为客户端端 访问。1,windows 安装(2,linux 安装。
2024-03-06 12:34:27 291
原创 线程安全的队列
首先对 队列加锁,然后判断当前队列的长度是否大于设定的容量,如果超出则生产者信号量需要阻塞等待,直到消费者 消费了一个,然后继续向下执行添加逻辑。如果不大于设定的长度,则正常向队列添加一个元素,然后唤醒消费者 信号量,取消费。唤醒后,如果此时 消费者或者生产者正在阻塞,则会继续进行,并且检测到了isClose_=false,则会正常退出。如果为空,则说明队列没有元素,消费者等待。这里还有一个函数,用来超时判断,如果队列为空,则等待一定秒数,如果这个时间过后,仍然为空,则直接返回false.
2024-03-01 15:00:18 450
原创 线程池学习
这段代码之后,相当于8个线程,从任务队列tasks 中抢任务,抢到一个执行一个。比如A线程 抢到了任务1,任务1 在执行中过程中,由于队列处于未加锁状态,那B线程,就可以继续抢任务2。这里添加完成之后,上述的8个线程就会从这个任务队列中抢任务,然后执行。(3),加锁 确保 ,各个线程对 任务队列(tasks) 不产生竞争,因为添加任务,取任务都要操作这个队列。如果任务队列不为空,则取出第一个任务,队列减1,然后解锁,执行任务,再加锁。如果线程池是退出状态,则跳出当前循环,当前线程也会退出。
2024-03-01 11:56:10 893
原创 利用N2N实现内网穿透
这个开源工具,可以达到内网穿透的目的,但是数据要经过服务器,最近发现了N2N这个 p2p工具,同样可以进行内网穿透,并且如果在打洞成功的情况下,数据不经过服务器。安装完改下名字吧,默认是本地连接,我改成了TAP,一会儿配置文件要用。-l 为公网服务器ip,后边的32222端口,为服务器端配置文件中的端口号。下载客户端程序,可以自己用源码编译,也好好多好心人已经提供了编译好的程序(这表明 穿透失败了,查下原因,看下NAT类型。-a 是虚拟网卡的ip,确保要穿透的两个内网机器 在同一个网段即可。
2024-03-01 10:14:45 465
原创 C# 通过共享内存调用C++ 算法
比如 C++ 将一个字符串传递给C#,由于他们直接只能使用c接口,传递char* 指针,那必须是C++开辟内存,然后将地址给到C#,但是什么时候清空这个内存 又是个问题。3,双方进行数据交互时,先用4个字节,存入数据的长度,再存入数据内容。上回书说到,将c++算法封装为dll 插件,c++加载后,暴露C风格接口,然后供C#调用。2,C# 在给共享内存传数据时,使用C的memcpy,不使用本身的Marshal.Copy。调用算法时,利用事件进行通知,超时后 将当前图片保存,便于后期查找。
2024-02-26 17:39:43 437
原创 Qt 使用QScintilla 编辑lua 脚本
注意debug 模式 必须加载debug 版本编译的库,不然回提示 ”QWidget: Must construct a QApplication before a QWidget“2, 打开 src/qscintilla.pro 文件 编译出 dll库。利用QScintilla 编辑lua 脚本。1,下载 QScintilla。3,工程中引入这个库。
2024-02-18 15:30:28 839
原创 C++ 调用js 脚本
使用Qt/C++ 调用js 脚本。Qt 调用lua 脚本性能应该是最快的,但是需要引入第三方库,虽然也不是特别麻烦,但是调用js脚本,确实内置的功能(目前Qt使用现成的js生态还很麻烦,在这种情况下,推荐使用lua脚本。
2024-02-18 11:53:59 626
原创 使用esp32 cam + SR602人体感应模块制作一个小型的监控
3, 服务器利用python 搭建一个mqtt客户端,订阅到数据后 将图片保存,并发送到指定邮箱。做一个小型的监控,类似电子猫眼,监测到人之后,取一张图 然后发送到自己的邮箱。2,mqtt发送图片,不需要转成base64格式,但是需要重新设置下缓存大小。2. esp32 cam 取图 并通过mqtt协议传到远端服务器。3,这个玩意 发热很严重,还没测试 两节18650电池能用多久。1,接收图片的邮箱,需要开通smtp服务。1.sr602 传感器监测到人。
2024-02-06 17:07:36 377
原创 C++ 调用lua 脚本
这里调用lua 脚本中的process函数,并传入16进制,假设为 温度 湿度数据。并打印函数返回的字符串。1,工程中引入 头文件,库文件。lua二进制下载地址(使用Qt/C++ 调用 lua 脚本 扩展原有功能。解析成两个uint8整型,假设为 温度 和湿度。3,编写my.lua脚本。2, 调用脚本内函数。
2024-02-04 15:21:35 1544
原创 分享一个好用的线程安全的c++ 日志库(spdlog)
2,封装成成一个单例模式,在任何需要使用的地方,直接调用即可。线程安全,简单易用的跨平台日志库。1,将源码加到工程中。
2024-02-01 16:35:25 200
原创 分享一个Qt使用的模块间通信类
不同线程,或者同一线程的不同类之间通信,按照Qt的机制,定义一个信号,一个槽,然后绑定。以两个类A,B为例,A触发一个信号,B执行一个槽,在定义好信号和槽之后,需要在另一处,将两个类的信号和槽进行绑定。如果模块特别多,绑了绑去 略显麻烦,耦合性太高。这样,A 和B 两个类 发布和订阅的唯一字符串标识符只要一致,A 在pubsh 的时候 B 就可以subscribe到,并且A 和B 完全耦合,相互不可见。#include "PSEventController.h"此处分享一个类,别人写的,忘记了在哪看到的。
2024-02-01 16:26:49 495
原创 Qt QGraphicsScene 基于视频的绘图
利用qml 基于opengl 进行渲染,可以达到任意图形的绘制,但是帧率 只有25帧左右。曾经搞在线教育时,尝试在视频上进行文字或者图形的绘制,但是发现利用Qt widget 传sdk 句柄的方式,只能使用窗口叠加的方式(同时将QGraphicsPixmapItem放到最底层,即可达到在上边绘制任意图形的目的。以直线为例,实现的时候 先画一个普通的矩形,然后添加两个控制点,用于改变大小和旋转,通过控制点中 推拽的信号 来改变矩形的大小和旋转的角度,并且在矩形的paint函数中,更新控制点的位置。
2024-01-31 15:30:02 1067
原创 Qt 基于海康相机 的视频标绘
利用qml 基于opengl 进行渲染,可以达到任意图形的绘制,但是帧率 只有25帧左右。如今要开发光学测量仪,发现使用QGraphicsPixmapItem 进行图片的渲染,可以利用QGraphicsItem 进行任务图形的叠加绘制,并且帧率目测大概在25帧所有,满足需求。曾经搞在线教育时,尝试在视频上进行文字或者图形的绘制,但是发现利用Qt widget 传sdk 句柄的方式,只能使用窗口叠加的方式(同时将QGraphicsPixmapItem放到最底层,即可达到在上边绘制任意图形的目的。
2024-01-25 15:13:04 738
原创 基于 QML Orangepi 做一个生命体征监测设备
2,监测页面 , 当手指触摸到传感器时 自动跳转到 生命体征监测页面。实时显示监测到的各项体征。分为两个程序,一个负责采集各项传感器数据,另一个用于显示传感器数据。中间通过mqt交互。1,主页面,显示 实时天气,未来两天的天气,还有日期,室内的温度和湿度。做一个可以检测 血压,血氧,心率,体温的设备,给老丈人使用。
2024-01-22 16:40:44 392
原创 Qt 中文处理
某些 低于此版本的qt,上述方式会出现乱码的情况,此时需要将utf-8编码方式的文件转成utf-8 带bom。比如使用txt进行转换,但是win7 系统的某些版本 txt 不带此格式。默认用Qt 创建的文件使用utf-8编码格式,此环境下 中文没有问题。环境:Qt 5.15.2 vs2019 64位 win11系统。自己写了一个工具 用于批量将utf-8 文件 加bom。同时代码也需要修改一下。
2023-12-12 14:38:40 527
原创 用flutter 写一个专属于儿子的听书的app
儿子最近喜欢上了用儿童手表听故事,但是手表边里的应用免费的内容很少,会员一年要300多,这么一笔巨款,怎能承担的起,所以打算自己开发一个专属于儿子的听书app。后端由两个服务组成,一个文件服务用于预览图片和在线听故事。一个接口服务用于 获取故事列表和某个故事的详细内容。前端app用flutter开发,一共三个页面。故事列表页,详细故事页,和播放页面。当有了新的故事后,只需要准备一张故事的预览图,然后一起放到服务器上即可。
2023-11-29 22:09:04 521
原创 在arm 64 环境下使用halcon算法
halcon,机器视觉领域神一样得存在,在windows上,应用得特别多, 但是arm环境下使用得很少。按照官方说明,arm下只提供了运行时环境,并且需要使用价值一万多人民币的硬件加密狗才可以运行,但众所周知,我朝盗版软件横行,因此写下了这篇不道德但是使用文章。halcon的运行时环境,包括了所有的so库,但缺少头文件。要想在arm 下编译,头文件,库文件缺一不可,因此需要将 开发环境的头文件拷贝到运行时环境下。具备了头文件和so文件后,再将破解文件进行替换,就可以在arm 下使用halcon算法了。
2023-11-23 17:38:51 950 13
原创 Qt 基于海康相机的视频绘图
自己取图然后转成QImage ,再向QWidget 进行渲染,根据以往的经验,无法达到很高的帧率。因此决定使用相机SDK自带的渲染功能,也就是传一个句柄给到sdk。但是这样视频渲染出来了,向上绘制图案,会被视频遮挡住,因此这里采用了两个窗口叠加,然后上层窗口设置透明背景的方式来实现。在视频窗口上进行绘图,包括圆,矩形,扇形等。
2023-11-21 09:30:04 1229
原创 基于orangepi lts 3 的延时摄影程序
orangepi 外接摄像头,利用opencv,按照一定间隔取图,再利用opencv 将图片编码成视频。利用orangepi +摄像头 使用python写一个延时摄影的程序。利用mqtt进行通讯,可以写一个app进行控制。
2023-11-01 13:26:31 510 3
原创 linux 下 C++ 与三菱PLC 通过MC Qna3E 二进制 协议进行交互
西门子plc 有snap7库 进行交互,并且支持c++ 而且跨平台。但是三菱系列PLC并没有现成的开源项目,没办法只能自己拼接,我这里实现了MC 协议 Qna3E 帧,并使用二进制进行交互。
2023-09-06 10:16:56 1016
原创 基于共享内存 实现Python 和c++ 传输图片
需求:c++ 将图片写入共享内存,python读取。将c++写的共享内存的操作封装为一个so库,c++ 和python共同调用这个库,便于双方的操作,省去信号量的管理操作。写入端将图片宽,高,通道数 写道共享内存的前三个int,这样读取的时候先读取三个int,之后根据前三个int读取具体图片内容。nx平台,4M的图,读取时间大约在20ms 左右。
2023-09-01 13:45:28 676
原创 基于Orangepi 3 lts 的云台相机
利用orangepi 3 lts 和arduino nano 制作了一个云台相机,可用于室内监控。orangepi 3 ,arduino nano ,usb相机,180度舵机两个。云台利用c语言对舵机机进行角度控制,并使用串口与orangepi 进行交互。相机采用python 利用opencv进行取图。前端采用vue3 对mqtt消息进行接收和发送。整体采用mqtt进行消息的中转。
2023-08-06 21:43:09 973
原创 Qt 对16进协议进行处理
场景:嵌入式设备中数据的交互的,比如串口,udp/tcp一般都是自定义的协议, 举个例子,如下协议,使用udpscoket进行数据的收发。那完整的16进制 心跳包为 0x55 0x66 0x88 0x00 0x03 0x01 0x00 0x88。假设心跳包的 MSG_TYPE 为01,负载数据为 00 88。发送方ID 也为88。Msg_type+payload的字节长度。
2023-07-20 17:08:29 570
原创 VTK 悬浮显示 actor详细
1,利用vtkInteractorStyleTrackballCamera 的OnMouseMove 事件 判断是否处于悬浮状态。2,判断悬浮后,首先将世界坐标转为屏幕坐标,然后分别绘制文字和背景,当不处于悬浮时,移除文字和背景。需求:场景中一个actor,鼠标悬浮时 显示此actor的信息。
2023-06-27 18:13:21 395
原创 嵌入式设备 如何运行halcon算法
4,运行版不带 头文件,如果想在linux下编译 halcon算法,可以将开发板的头文件拷贝过来,如(halcon-18.11.4.0-linux.tar)下的头文件。2,插入加密狗后安装对应的软件,比如halcon-18.11.4.0-aarch64-linux-runtime.tar,之后将加密狗带的license 拷贝到安装路径下(/opt/halcon/license)下。5,运行时需要可执行文件同时找到so库和license,可拷贝到运行目录下或者放到环境变量里。
2023-06-21 15:14:44 864
原创 处理VTK9.2 vtkSTLReader 读取中文文件失败
vs中使用 vtkSTLReader 读取文件,若文件名为中文则需要进行转码,将GBK转为utf-8。
2023-06-15 18:17:38 335
原创 树莓派 CM4 应用开机自启设置
用自己的图片 替换/usr/share/plymouth/themes/pix/splash.png。@sudo /xxxx/start.sh //上边注释掉 添加这一项 需要自己写一个启动脚本。在/boot/config.txt末尾添加语句 avoid_warnings=2。需求:基于树莓派写了一个应用,让其开机自启。
2023-05-26 10:00:54 807
原创 树莓派 CM4 RTC 时间同步
需求:树莓派 接pcf85063a RTC模块进行时间同步,上层使用Qt 开发应用,进行时间的读取与设置。三,设置时间 先设置系统时间,然后将系统时间 同步到rtc。/boot/config.ini 文件 修改。二,读取时间 直接读取系统时间。
2023-05-25 17:58:53 401
qtenginio-opensource-src-1.6.2.rar
2020-07-18
QML 安卓应用 135todo
2018-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人