![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Qt
土拨鼠不是老鼠
这个作者很懒,什么都没留下…
展开
-
如何将Qt pro工程文件 改成CMakeLists.txt
Qt pro工程管理文件,本人认为是很好用的,语法简洁易懂,但是只能在QtCreator中使用,想用使用其它IDE比如Clion或者vs,CMakeLists是种通用的选择,另外QtCreator的调试功能跟粑粑一样。C++ 中编译,无外乎代码本身的头文件,源文件。三方库的头文件,库文件。Qt本身自带了UI文件和qrc资源文件。CMake 无法像pro那样处理图标文件,需要先新建一个rc文件,rc文件中指明icon文件,然后加载rc文件。三,CMakeLists 文件。二,Qt pro文件。原创 2024-05-23 11:05:59 · 540 阅读 · 0 评论 -
Qt 在windows下显示中文
1,简单起见,在windows平台,如果只是windwos平台系统,直接将所有文件转成utf-8 带bom 格式,然后中文使用QStringLiteral(“中文”) 即可。某些 低于此版本的qt,上述方式会出现乱码的情况,此时需要将utf-8编码方式的文件转成utf-8 带bom。比如使用txt进行转换,但是。2,全部使用英文 如,tr(“en”),然后再去翻译文件中翻译。系统的某些版本 txt 不带此格式。格式,此环境下 中文没有问题。64位 win11系统。默认用Qt 创建的文件使用。原创 2024-05-21 10:04:11 · 551 阅读 · 0 评论 -
西门子 PLC snap7 使用
2. 把examples/cpp 下的 snap7.h 和cpp 加到工程里。5. 用Hsl工具测试下,这里再M100 位置 写入了一个byte ,值为1。集成snap7库,对西门子plc进行访问。3. 封装一个单例 来使用 这个库。4. 使用的时候 直接调用业务函数。原创 2024-05-16 14:10:59 · 191 阅读 · 0 评论 -
QML 本地存储(Setting,sqlite)
3,main.cpp 中 指定下数据库的保存路径,比如当前路径。不指定的话,会默认存到系统路径,不太好找。跟QWidget 中的QSettings 一样,可以简单的存储一些配置。main.cpp 中需要 定义 应用程序名称,公司名称,域名称。2,使用的时候 引入js 文件,之后直接调用接口就可以了。按钮移动时将x y 保存到Settings 中。下次加载页面时 从Settings 读取位置。可以存储一些复杂的数据。1,将数据库操作 单独封装成一个js文件。我们以一个按钮的位置为例,进行讲解。原创 2024-05-07 15:14:41 · 941 阅读 · 0 评论 -
PyQt程序的打包
F表示生成单文件模式,即只有一个可执行文件,比如windows下的exe。-n表示指定输出文件名,例如-n app.exe。-i表示指定图标文件,例如-i icon.ico。-w表示生成窗口模式,即不显示控制台窗口。打包后的程序位于 dist文件下。记录下PyQt程序的打包。原创 2024-05-06 09:01:46 · 247 阅读 · 0 评论 -
PyQt 入门
Python体系下GUI框架也多了去了,PyQt算是比较受欢迎的一个。如果对Qt框架熟悉,那掌握这套框架是很简单的。使用designer工具创建ui文件。随便放几个控件,然后保存到工程目录下,取名为widget.ui。python下UI文件无法直接使用,需要使用这个工具转成py文件。2.Designer UI工具。3.UI文件转py文件工具。2.UI文件转py文件。3,主程序加载py文件。原创 2024-05-06 08:59:39 · 458 阅读 · 1 评论 -
QML model-view 框架
比如一个通讯录,可以用list展示,也可以用grid展示,这都属于view部分,可以不同。原创 2024-04-29 16:12:49 · 289 阅读 · 0 评论 -
windows下其它软件的自动打开与点击
项目要用到第三方软件,这个软件没有提供SDK,只提供了两个exe,每次开机后需要启动这两个exe,并且还要点击上边的两个按钮。这样的用户体验怎么能让人接受呢,如果查资料,发现windows提供了接口,可以自动化操作。窗体标题 或者句柄 可以使用 Spy++ 这个工具获取。原创 2024-04-29 08:57:32 · 162 阅读 · 0 评论 -
树莓派下开机自启的Qt程序配置
比如我们的程序在test文件夹内,内部含有完整的Qt应用程序及依赖库,我们在同级目录下创建一个安装脚本 install.sh。我们需要编写一个脚本用于安装qt打包后的程序,也就是整个文件夹。脚本的作用就是将文件夹拷贝到指定的位置。我们需要编写两个脚本,来启动和停止我们的应用。这里假设我们的应用名称为test。Qt开发的GUI程序,部署到树莓派中,并设置开机自启。1,制作启动脚本和停止脚本。原创 2024-04-29 08:56:16 · 378 阅读 · 0 评论 -
一篇文章 学会Qt 样式表(qss)
QML 中风格和主题的设计可以通过配置文件选择现有几种中的一种,或者直接在控件定义时,指定其属性,如背景颜色或者字体大小。在QWidget框架中,则通过了一种叫做qss样式表的东西来进行描述,跟CSS逻辑上类似。那这个谁,有好多种写法,比如所有按钮,某个按钮,按下的按钮。而这个样子又有好多,比如背景色,边框,圆角等。2,字体 一般是一个全局的设置,所以可以在此处设置全局字体。1,新建一个qss文件,并添加到资源里。然后在main函数中,进行全局的设置。3,我们以如下的窗口来举例说明。原创 2024-04-28 10:43:57 · 477 阅读 · 0 评论 -
QML实现 无边框 可移动 可缩放窗体
利用QML实现无边框窗体,要求可移动,可缩放。原创 2024-04-26 08:55:11 · 296 阅读 · 0 评论 -
QML中调用HTTP请求
涉及到Http请求,第一反应可能是使用Qt的QNetworkRequest和QNetworkReply实现,然后QML再与其交互,但是这样过于麻烦了。其实QML自己已经具备了http网络请求访问的功能。而且使用起来很方便。主要是利用XMLHttpRequest这个类,请求接口,然后将返回的数据解析成json对象(JSON.parse),之后就可以像js一样去拿json对象里的数据了,当然前提是接口返回得数据是json。我们这里举一个访问天气接口,然后解析其数据的例子。原创 2024-04-25 16:55:31 · 527 阅读 · 0 评论 -
QML 中的状态
使用QWidget的思路去实现就是在按钮click对应的槽函数中,依次获取三个button的指针,然后改变其颜色,这样也能实现,但是不够优雅。QML的思路是,全局定义一组状态,然后每个状态来控制具体的属性,使用时只要切换不同状态就可以了,后续修改的话,只需要修改这个全局状态就行,并且三个按钮集中暴露在这组状态中。状态描述了当前用户界面样子,QML中一个状态定义了一组属性的改变,并且会在一定条件下被触发。//红灯状态 红灯亮 其它灭。//定义一组状态 规定每个状态下 的属性。//依次切换三个状态。原创 2024-04-25 09:00:32 · 584 阅读 · 0 评论 -
QML 不同风格和主题的切换
Quick程序提供了方便的用于切换不同风格和主题的配置文件,如果没有设计稿,又想界面没那么丑,那么可以用这套配置,让应用看起来相对专业一点。3. backbround,color类型,表示背景色,默认由主题指定(light或者dark)一种受到 macOS 的设计风格启发的风格,它提供了类似 macOS 风格的外观和交互体验。4. elevation,int类型,表示海拔高度,值越大,阴影越深,该值与具体控件相关。6. theme,枚举类型,表示主题,默认是Light,也可修改为Dark。原创 2024-04-24 07:01:57 · 769 阅读 · 0 评论 -
windows下利用NSIS制作安装包
经过程序员抓耳挠腮的开发,应用终于开发完毕了,那接下来无论发布给客户还是给测试,最好的方式时打一个安装包,直接给release文件夹,就显得不太专业了。1,我们以一个QML程序为例,新建一个pkg/v1.0.0/bin文件夹,并将 release版本的pkgTest.exe拷贝到这个bin文件夹下。选择目录这一步很关键,把自带的两个删掉,然后指定我们的主程序的父目录,也就是bin文件夹。),自己可以根据业务需要去下载,并且它本身也有大量的指令,可以支持更高的定制化需求。2,用第三方打包软件,制作安装包。原创 2024-04-23 09:00:00 · 511 阅读 · 0 评论 -
QML与C++交互
QML写界面,业务逻辑使用C++,既能快速的开发界面也能利用C++的强大生态,这是目前比较被认可的方式,那就涉及到QML与C++对象的交互。上述方式相当于同步的方式调用C++中的函数,还可以异步的响应C++中的信号,相当于QML中的槽与C++中的信号进行绑定。点击登录 ,如果密码或用户名错误会将C++的状态信息,实时的显示到左上角的QML Text控件中。我们以登录例子来说明,页面点击登录,将信息传递到c++ http对象进行密码的验证,然后返回登录结果。//调用C++对象中的函数。原创 2024-04-22 14:33:24 · 927 阅读 · 0 评论 -
基于Qt 和python 的自动升级功能
1,服务端使用python3.7 ,搭配 fastapi 和uvicorn 写一个简单的服务,开出一个get接口,用于客户端读取安装包的版本,描述,和路径。1,客户端是一个 QDialog,每次启动时 从服务端获取最新的版本号,大于则开始下载安装包,下载完成后,则执行安装包。json文件长这个样子,每次客户端都解析这个文件,如果最新的版本大于当前的版本,则从url下载文件,并自动执行文件。2,使用的时候 将客户端放到main函数中,并传入当前的版本号。公司内部的一个客户端工具,想加上一个自动升级功能。原创 2024-03-12 11:38:48 · 598 阅读 · 0 评论 -
C++ 调用js 脚本
使用Qt/C++ 调用js 脚本。Qt 调用lua 脚本性能应该是最快的,但是需要引入第三方库,虽然也不是特别麻烦,但是调用js脚本,确实内置的功能(目前Qt使用现成的js生态还很麻烦,在这种情况下,推荐使用lua脚本。原创 2024-02-18 11:53:59 · 753 阅读 · 0 评论 -
C++ 调用lua 脚本
这里调用lua 脚本中的process函数,并传入16进制,假设为 温度 湿度数据。并打印函数返回的字符串。1,工程中引入 头文件,库文件。lua二进制下载地址(使用Qt/C++ 调用 lua 脚本 扩展原有功能。解析成两个uint8整型,假设为 温度 和湿度。3,编写my.lua脚本。2, 调用脚本内函数。原创 2024-02-04 15:21:35 · 1722 阅读 · 0 评论 -
分享一个Qt使用的模块间通信类
不同线程,或者同一线程的不同类之间通信,按照Qt的机制,定义一个信号,一个槽,然后绑定。以两个类A,B为例,A触发一个信号,B执行一个槽,在定义好信号和槽之后,需要在另一处,将两个类的信号和槽进行绑定。如果模块特别多,绑了绑去 略显麻烦,耦合性太高。这样,A 和B 两个类 发布和订阅的唯一字符串标识符只要一致,A 在pubsh 的时候 B 就可以subscribe到,并且A 和B 完全耦合,相互不可见。#include "PSEventController.h"此处分享一个类,别人写的,忘记了在哪看到的。原创 2024-02-01 16:26:49 · 531 阅读 · 0 评论 -
Qt 基于海康相机 的视频标绘
利用qml 基于opengl 进行渲染,可以达到任意图形的绘制,但是帧率 只有25帧左右。如今要开发光学测量仪,发现使用QGraphicsPixmapItem 进行图片的渲染,可以利用QGraphicsItem 进行任务图形的叠加绘制,并且帧率目测大概在25帧所有,满足需求。曾经搞在线教育时,尝试在视频上进行文字或者图形的绘制,但是发现利用Qt widget 传sdk 句柄的方式,只能使用窗口叠加的方式(同时将QGraphicsPixmapItem放到最底层,即可达到在上边绘制任意图形的目的。原创 2024-01-25 15:13:04 · 791 阅读 · 0 评论 -
Qt 基于海康相机的视频绘图
自己取图然后转成QImage ,再向QWidget 进行渲染,根据以往的经验,无法达到很高的帧率。因此决定使用相机SDK自带的渲染功能,也就是传一个句柄给到sdk。但是这样视频渲染出来了,向上绘制图案,会被视频遮挡住,因此这里采用了两个窗口叠加,然后上层窗口设置透明背景的方式来实现。在视频窗口上进行绘图,包括圆,矩形,扇形等。原创 2023-11-21 09:30:04 · 1290 阅读 · 0 评论 -
QML android 采集手机传感器数据 并通过udp 发送
利用 qt 开发 安卓 app ,采集手机传感器数据 并通过udp 发送。原创 2023-09-12 09:33:05 · 1711 阅读 · 3 评论 -
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 · 689 阅读 · 0 评论 -
树莓派 MCP3021 读取电池电量
树莓派 接MCP3021 模数转换器 读取电池电量。原创 2023-05-30 14:01:37 · 632 阅读 · 0 评论 -
Qt 树莓派 按键信号接收
2,线程中循环 检测按键信号。硬件用树莓派,上层应用用QT。原创 2023-05-30 13:57:35 · 235 阅读 · 0 评论 -
树莓派 CM4 应用开机自启设置
用自己的图片 替换/usr/share/plymouth/themes/pix/splash.png。@sudo /xxxx/start.sh //上边注释掉 添加这一项 需要自己写一个启动脚本。在/boot/config.txt末尾添加语句 avoid_warnings=2。需求:基于树莓派写了一个应用,让其开机自启。原创 2023-05-26 10:00:54 · 839 阅读 · 0 评论 -
树莓派 CM4 RTC 时间同步
需求:树莓派 接pcf85063a RTC模块进行时间同步,上层使用Qt 开发应用,进行时间的读取与设置。三,设置时间 先设置系统时间,然后将系统时间 同步到rtc。/boot/config.ini 文件 修改。二,读取时间 直接读取系统时间。原创 2023-05-25 17:58:53 · 449 阅读 · 0 评论 -
Qt 应用封装成ActiveX 控件
(1),QtCreator 新建不了active控件的工程,需要自己按照需要编写工程。(2),vs 安装好助手后,自带了工程模板,但是我机器上编译会出错,暂时没有解决。将Qt 窗口封装成ActiveX 控件 供其它程序使用。只有IE 还支持activeX控件加载。(3),main.cpp 文件。用qt再带的idc 命令。(4).def 文件。原创 2023-02-25 09:52:38 · 534 阅读 · 0 评论 -
Qt 根据参数 自动生成vs 工程
给算法部门提供一套代码框架,让其写算法dll。为了使dll能融入主工程,其框架对格式有一定要求,为了增加算法部门的快发效率,因此开发一个小工具,用于自动生成这套框架。2, 将相应文件拷贝后,在根据名称和参数 对模板内,固定位置进行替换,比如 dll.cpp 将预留位置 %1% %2% %3% 进行字符换替换。1,将模板放置到 exe所在的路径下,生成时,先拷贝模板 到目标文件夹。运行后,只需要输入算法名称,参数即可。3,最后生成完 打开工程。原创 2023-01-30 17:54:33 · 215 阅读 · 0 评论 -
使用 asio2库 进行进程间通信
项目需要,目前我仅仅用到了rpc 这部分功能,使用它来替换QtRo 实现进程间通信,QtRo 用起来太麻烦,需要接口文件,并称生成对应的代码,还有去继承,实现。这个库 只支持c++ 内置类型,因此所有自定义类型,最好都要转成c++ 内置类型,发送图片是将mat 编码到了 string里。甭管是客户端还是服务端,定义好 函数后,通过bind 绑定,之后 对端 就可以异步调用了(async_call)。(1),如何发送图片,入opencv Mat。(2),如何发送点云。原创 2023-01-07 09:52:13 · 650 阅读 · 0 评论 -
Qt QImage 显示TIFF格式图片
以3通道图像为例,位深度 显示96位,意思是 一个像素,可以显示的颜色范围为2的96次方种,每个通道32位,也就是4个字节。利用Qt 控件 显示 tiff 图片,由于tiff图像深度位96位,3通道,所以无法直接用QImage 显示,QImage 支持24位,因此需要利用Opencv 进行转换。(5),最后建议使用 QGraphicsView 显示 QImage 这样可以进行缩放,更利用观看。(2),加载后进行 规一化,然后进行位深 转换,将32f 转成8u。原创 2023-01-06 13:26:53 · 2946 阅读 · 4 评论 -
基于QGraphicsView 架构的工作流
4),算子的运行。运行时,遍历scene中的所有item,执行每个item的run函数。算子的run函数中,单独开启一个线程,来对输入端口的数据进行判断,并执行具体的逻辑。(1),步骤窗口到 view。重新 drag drop事件。利用反射 根据算子的名字 构造具体的类。使用Qt qtpropertybrowser 控件。自定义控件需要更改源码。将算法封装成item,使用拖拽的方式进行自由组合,支持历史步骤,属性编辑等功能。(2),历史步骤记录。使用 QUndoStack框架。...原创 2022-08-18 19:18:22 · 622 阅读 · 4 评论 -
Qt 微内核架构实践
一,场景适用客户端软件的架构有两种:微核架构,分层架构。以往所有的项目使用的都是分层架构,但是此种架构有个天然的缺点就是层的隔离问题,有时某层起的作用仅仅是数据的转发。因此借着一个新项目的机会尝试下微核架构。二,微内核架构介绍微内核架构的核⼼心系统⼀一般情况下只包含⼀一个能够使系统运作起来的最⼩小化模块。很多操作系统的实现就是使⽤用微内核架构,因此这也是该架构名字的由来。从商业应⽤用的⾓角度看,核⼼心系统通常是为特定的使⽤用场景、规则、或者复杂条件处理定义了通⽤用的业务逻辑,⽽而插件模块根据这些原创 2021-07-15 23:04:49 · 3189 阅读 · 1 评论 -
ASCII、GB2312、Unicode、Utf-8 都是什么鬼?
一,编解码:首先搞懂一个概念,什么是编解码。计算机这个东西只认识0或1,而人能识别的是一些特殊的字符,比如中国的象形文字或者欧美的表音文字,那让人和计算机之间能够相互沟通的这个过程就叫作编解码。把人能看到的存储到计算机里叫做编码,把计算机存储的转换成人能看到的叫做解码。二,历史ASCII:因为计算机是美国人发明的,因此第一套编码规则就是ASCII码,可以将英文字母和一些特殊字符如@#¥等转换成对应的0和1存储到计算机中,比如你在屏幕上看到的大写字母U按照ASCII编码存储在计算中就是..原创 2021-06-24 00:55:07 · 196 阅读 · 2 评论 -
一种基于NSIS打包软件的 Qt 升级功能实现
一,需求Qt程序,利用NSIS打包软件,实现强制升级功能(包含增量更新)。简单说 就是安装包是完整的就执行安装功能,安装包是升级包,就静默替换需要更新的文件。二,流程三,详解(1),程序启动后 先调用后端接口,检测线上版本Upgrade upgrade; upgrade.setServerInterface(mainController.get()->getServer()); upgrade.startDetectNet();//检测网络 d.原创 2021-02-24 18:36:20 · 815 阅读 · 2 评论 -
Qt frp+TightVNC 实现远程访问功能
一,背景Windows 软件安装到客户机器上,出现问题 需要对其进行远程支持,前期使用向日葵免费版,但是向日葵这个软件不可控,万一弹个广告或者哪天不能用了 都是承担不起的,所以基于frp 内网床头+vnc 局域网远程访问,实现一套自己可控的 远程支持系统二,实现方案(1),frp 部署 ,主要为了实现内网穿透功能。具体参考:https://blog.csdn.net/weixin_38416696/article/details/109549598?ops_request_misc=%25.原创 2020-12-18 18:11:40 · 1603 阅读 · 2 评论 -
Qt cef使用
一,背景混合开发已经成为了主流,利用Qt+ cef ,界面部分用h5 逻辑用c++,未尝不是一种好办法。QML自带的QtWebEngine 是一种思路。Qt+cef 也是一种思路,并且已经有大神针对Qt将cef进行了封装,那就是QCefView。二,编译(1),源码下载https://cef-builds.spotifycdn.com/index.html#windows32(2),cmake 编译win32编译失败,x64可以(3),demo 演示程序自带了 一..原创 2020-12-11 17:19:42 · 5193 阅读 · 2 评论 -
QML Canvas 简单电子白板
需求:使用QML 自带得webView 来展示试题,需要再其基础上 进行简单得标注 讲解。效果:源码:import QtQuick 2.9import QtQuick.Window 2.2import QtQuick 2.7import QtQuick.Controls 2.3Window { visible: true width: 640 height: 480 title: qsTr("Hello World") ..原创 2020-12-01 19:23:54 · 455 阅读 · 0 评论 -
利用open-falcon(小米开源监控) 监测PC端软件运行状况
一,背景客户的电脑只运行公司指定的一款PC端软件,并且客户分布在全国各地,如果能时刻掌握各端电脑的情况,和软件的情况,那对问题的时的排查,以及问题出现前的预判都会起到很好的作用,经搜索发现了,open-falcon这个小米公司开源的监控系统。这套系统后端采用go语言开发,并内置了python架构的web管理页面。前端提供了自定义的 http post接口,只要符合它定义的json格式,无论是pc端还是手机端,都能接入这套系统。拷贝下官方的介绍,简单说就是很牛,能用于生产。强大灵活的数据采集原创 2020-10-28 11:34:22 · 941 阅读 · 1 评论