工控软件
文章平均质量分 90
宁静致远2021
天道酬勤,持之以恒。
发上等愿,结中等缘,享下等福;
择高处立,寻平处住,向宽处行。
展开
-
浮点数的比较以及abs和fabs的区别
我们知道有的小数可能小数点后有很多为,比如无限循环小数、无限不循环小数,而计算机中的float和double能够表示的小数范围是有限的,因此浮点数在计算机中的存储是不精确的。使用abs求浮点数的绝对值是有问题的,使用fabs求整数的绝对值也是有问题的,所以在C语言中求浮点数的时候一定要选对函数。在C++中,abs和fabs都是用来计算数值的绝对值的函数,但它们之间存在一些重要的区别。fabs:对于浮点数,精度取决于具体的实现和平台,但通常足够用于大多数的数值计算。abs:通常用于计算整数的绝对值。原创 2024-03-02 13:16:26 · 1188 阅读 · 0 评论 -
基于Ubuntu环境Git服务器搭建及使用
将客户端公钥id_rsa.pub内容复制到服务端.ssh/下新建文件authorized_keys里,这样我们在拉取推送代码时,就不需要输入密码了。在服务器终端输入如下命令,输入两次密码后(比如密码也是:git),一路回车就创建好了。客户端:windows10_x64、Ubuntu20.04。无论是服务端还是客户端都需要先安装git。服务器:Ubuntu18.04。原创 2023-12-31 22:10:35 · 1212 阅读 · 0 评论 -
QString设置小数点精度位数
因为Qt又默认只保存前6位,所以数据就是123.457。所以对精度要求高的话,就不要直接1234567/10000.用除法。在Qt中,我们可以使用QString::number()函数将float类型转换为QString类型以便在界面上显示。该函数默认显示6位小数,但我们也可以通过设置第二个参数来控制小数点位数。QString使用toDoouble转化double类型,其实精度没有丢失,只是我们使用qDebug打印时出了问题。在上面的代码中,参数’f’表示将数值格式化为浮点数,2表示保留2位小数。原创 2023-12-31 17:25:42 · 1519 阅读 · 0 评论 -
linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。原创 2023-12-30 18:54:32 · 1779 阅读 · 2 评论 -
Qt图形视图框架:QGraphicsItem详解
我们在使用QGraphicsView框架的时候,经常需要自定义QGraphicsItem,并且需要实现Item的平移、改变大小和旋转的效果。接下来介绍他们的一种实现方式。原创 2023-11-15 09:34:57 · 654 阅读 · 0 评论 -
Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件
关于 Qt 布局管理,有专门的帮助文档页面Layout Management。本章的主要内容就是介绍布局管理的知识,Qt 设计师里面不仅有布局器的控件可以拖动使用,还可以在窗体里面选择控件,然后点击设计师上面的工具按钮自动添加布局器。本节首先大致介绍一下 Qt 设计师里面关于布局器的操作界面。Qt 的窗口主要内容包括: 布局的样式 , 基于UI界面设置布局 , 基于API设置布局。Qt 窗口布局是指将多个子窗口按照某种排列方式将其全部展示到对应的父窗口中的一种处理方式。原创 2023-11-11 17:00:23 · 5331 阅读 · 0 评论 -
CMake教程--QT项目使用CMake
其中,BasicUsageEnvironment, groupsock, liveMedia, UsageEnvironment都是live555项目的子模块,mediaServer是集成所有子模块打包成为可执行文件的部分。调用环境变量: $ENV{NAME}这种做法会导致项目里即便改了一处代码,也会编译所有代码,导致编译时间较长,不能很好利用增量编译,再说C/C++本身编译就很慢。变量的引用方式是使用${},在IF中,不需要使用这种方式,直接使用变量名亦可。在工程build目录下执行。原创 2023-11-11 15:17:23 · 1571 阅读 · 0 评论 -
QRadioButton、QCheckBox样式表
如果启用了自动互斥,属于同一个父部件的单选框的行为就和属于一个互斥按钮组的一样。如果你需要为属于同一父部件的单选框设置多个互斥按钮组,把它们加入QButtonGroup中。就像QPushButton一样,单选框可以显示文本,以及可选的小图标。当然,也可以设置setExclusive(false)来关闭互斥,从而实现多选功能。上面,我们通过调用QButtonGroup的setExclusive(true)来设置按钮组中的单选框互斥。槽函数,用来判断当前点击的按钮,以及获取按钮组中各个按钮的选中状态。原创 2023-11-11 08:50:01 · 1074 阅读 · 0 评论 -
Qt中正确的设置窗体的背景图片的几种方式
2.做过Qt开发的朋友应该都知道,Qt的子窗体是会继承父窗体的属性的,这就证明了为什么父窗体的背景在子窗体中也会有,这个是对这个原因的一个非常合理的解释。那么问题来了,我们怎么才能做到子窗体不继承父窗体的背景呢?1.在QWidget中这种方法是不行的,如果你足够细心的话,你会发现使用同样的设置背景图片的方法,背景图片其实并没有发生真实改变,但是它的子窗体背景图片是会发生改变的。背景色设置和背景图片设置也是一样的道理,如果不想窗口中的部件颜色和主窗口一样,也是需要#MainWindow来设置限定范围。原创 2023-11-03 14:17:37 · 10056 阅读 · 0 评论 -
QT之多个界面相互切换 (stackedWidget控件)
QStackedWidget是一个堆栈窗口控件,使用QStackedLayout布局,可以填充一些小控件,但同一时间只有一个小控件可以显示。QStackedWidget类实现组件层叠,但它是一个组件,而不是一个容器。stackedWidget控件: 可以自由在多个widget切换,可以通过点击顶部菜单,显示不同界面,在实际开发中应用很广泛。- 将一个组件添加到容器的末尾,返回添加组件的索引;- 将组件添加到指定的容器位置,返回添加组件的索引;- 将索引为index的组件设为可见,是个槽函数。原创 2023-11-03 13:46:49 · 2413 阅读 · 0 评论 -
基于Qt 的可视化图片处理程序——图片的加载与保存
在 Qt 中,我们一种最常用的图片加载方式就是使用 QImage 库,此处我们通过 QImage 加载图片,之后通过加载到 QPixmap 中,最终显示在 Label 上。在保存图片之前,我们需要先提取要进行保存的目标图片,通过一种类似于截屏的方式 pixmap()->toImage() 对图片进行提取,然后缩放到原来的大小,最后进行保存。首先要确定,使用 Qt 中 QFileDialog 库中的 getLoadFile 进行选择文件。原创 2023-11-03 11:48:23 · 2116 阅读 · 0 评论 -
Qt控件 UI设计 QPushbutton、QToolButton、QMenu
1.信号和槽:qt的这个功能基本就是对c++回调函数的封装,使用起来比回调函数更方便,但是牺牲一些性能,会更慢一点。connect的参数我是这么理解的:谁,发出什么信号,想让谁,实现什么功能。2.区别:toolbutton更特殊一点,可以配置快捷键触发槽,一般只用图片做按钮配置放在toolbar内,就像下图编辑界面的功能选项,用toolbutton就很简单。new一个pushbutton,new一个QMenu,new几个QAction,将action的对象加入menu的对象,原创 2023-11-03 09:03:18 · 540 阅读 · 0 评论 -
如何使用ps制作ico图标文件
然后调整图片大小,因为不调整的话会出现无法保存为ico文件的情况,因为ico文件最大像素为64x64,也就是4096像素。点击图像,选择图像大小,或者直接使用快捷键Ctrl+Alt+I。在这里你可以调整抠出来的图片边缘羽化程度,以及设置背景图层。最后是保存为ico文件格式,选择文件,点击存储为,也可以使用快捷键Shift+Ctrl+S。如何使用ps制作ico图标文件。我这里将他设置为64x64像素。原创 2023-11-01 14:40:49 · 2089 阅读 · 0 评论 -
QSS 自定义QLineEdit
原文链接:https://blog.csdn.net/Staranywhere/article/details/107306276本文将通过简单示例介绍QLineEdit样式如何自定义。QLineEdit通用属性如下:borderborder-radiusmarginpaddingbackgroundcolorfontborder-imageQLineEdit特有属性如下:lineedit-password-characterThe QLineEdit password character原创 2023-10-28 10:15:49 · 305 阅读 · 0 评论 -
QWidget|QFrame设置背景透明且可以带有边框颜色
之前在项目中有个需求:视频播放窗口电子放大功能,需要在播放视频的QWidget上绘制一个可以拖拽的矩形框,但是单独的drawRect并不能获得焦点去拖拽。QWidget覆盖到该窗口上,将其背景设置为透明即可,但是设置透明之后,其底色的黑色无法消除,经多方CSDN博主的成果于一身,搞定了该需求。效果: 窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明;在该窗口绘制一个矩形框,为画刷填充一个任意的颜色,重点:将其透明度降为不为0的数值即可。同样在构造函数中,效果和第一种方法相同。原创 2023-10-27 19:53:23 · 1612 阅读 · 0 评论 -
Qt下实现支持多线程的单例模式
实现单例模式的代码很多。本文的单例模式实现代码是本人一直在工程项目中使用的,现拿出和大家交流分享。本文实现的单例模式,支持多线程,采用双重校验检索的方式,集成析构类,杜绝内存泄漏,稳定性好。使用C++/Qt的朋友们可以了解一下。不再废话,直接上代码。单例是一种软件设计模式,采用单例模式书写的类可以确保在一个工程中只有一个对象实例。再通俗点,就是一个类写好了之后,就不需要也无法再把这个类实例化了,因为写这个类的时候已经确保了有且仅有一个已经实例化的对象。这样不是很蠢么?原创 2023-10-27 15:20:38 · 717 阅读 · 0 评论 -
Qt重定向QDebug,Qt/C++开源作品39-日志输出增强版V2022
相对于第三方的日志库,在 Qt 中使用 QDebug 打印更便捷,有时候也需要对 QDebug 输出进行重定向,如写入文件等。返回的函数指针我们可以保存起来,需要输出到控制台时进行调用。原创 2023-10-26 08:13:06 · 801 阅读 · 0 评论 -
Qt中的单例模式
单例模式是一种创建型设计模式,用于确保类只有一个实例存在,并提供全局访问点以便于其他对象获取该实例。在单例模式中,类只能实例化一次,并提供了一个静态方法或全局访问点来获取该实例。这样可以确保在整个应用程序中只有一个实例存在,并且可以通过该实例进行操作和访问。单例模式的特点包括:单一实例:单例模式确保类只有一个实例存在。全局访问点:通过静态方法或全局访问点获取单例对象,可以在任何地方访问该对象。延迟初始化:单例对象通常在首次访问时才会被创建,实现了延迟初始化的效果。原创 2023-10-26 07:55:58 · 781 阅读 · 0 评论 -
Qt中的枚举变量,Q_ENUM,Q_FLAG以及Qt中自定义结构体、枚举型做信号参数传递
之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序显得很臃肿。这时候就非常羡慕C#或者java等兄弟语言,内核内置了枚举量和字符串转换的方法。原创 2023-10-25 08:40:38 · 901 阅读 · 0 评论 -
生成二维码
QR码(全称为快速响应矩阵码;英语:Quick Response Code)是二维条码的一种,于1994年由日本DENSO WAVE公司发明。QR来自英文Quick Response的缩写,即快速反应,因为发明者希望QR码可以让其内容快速被解码。QR码使用四种标准化编码模式(数字,字母数字,字节(二进制)和汉字)来存储数据。QR码最常见于日本,为目前日本最流行的二维空间条码。QR码比较普通条码可以存储更多数据,也无需要像普通条码般在扫描时需要直线对准扫描仪。原创 2023-10-22 17:02:00 · 1113 阅读 · 5 评论 -
Qt判断文件夹路径、文件是否存在不存在则创建
1.用QFileInfo::isFile()方法。原创 2023-10-22 12:47:11 · 2473 阅读 · 0 评论 -
QT判断平台和生成版本设置输入目录
【代码】QT判断平台和生成版本设置输入目录。原创 2023-10-22 11:31:07 · 456 阅读 · 0 评论 -
QT使用MSVC编译时报错C2001: 常量中有换行符
2、使用中文字符常量时,用QStringLiteral修饰中文字符,格式如QStringLiteral(“中文字符”),这种方法必须在每次使用中文字符时都需要进行修饰,否则还是会出现错误,所以比较麻烦。1、将字符中的中文字符用英文字母或单词代替,这样解决的好处是代码规范,语言统一,缺点就是没有中文表达那样直接、清晰。在新电脑做一个简单的Qt项目时,在debug输出的时候,出现了C2001错误,提示“常量中有换行符”,却可以顺利通过编译,试了很久改了编码也不行,即便编译通过界面显示却会乱码。原创 2023-10-20 15:52:52 · 744 阅读 · 0 评论 -
Qt开发之路--模块化设计.pri文件
对于QT项目,默认情况下所有的文件都是在同一个文件夹下进行开发的,当做一个项目规模相对较大的时候文件很多导致维护及其困难,所以pri对文件进行模块化开发至关重要,pri进行模块化无非就是将相同业务逻辑的代码放到同一个文件夹下进行管理。第三步:在新建的文件夹下新建 " .pri " 文件,新建.pri文件名称规则(文件夹名称+.pri),新建.pri文件后,手动添加内容,或者根据第五步添加。如果一个大点的项目,含有多个*.pro文件呢,这些pro需要有些共同的设置或需要的文件,这时就很有必要了。原创 2023-10-17 14:59:06 · 1698 阅读 · 0 评论 -
Qt项目通过.pri文件将众多文件按功能模块分类显示,开发大型项目必备
一般我们创建Qt项目工程的时候,都是直接把所有的项目,头文件和资源文件等全放入pro中,这样一来小的项目(只有少数几个文件)那种,你可能就会觉得没有什么,但是在一些中大型的开发项目当中,可能会有十几个,甚至几十个文件的开发项目中,我们看树形结构的文件时,就会感到很杂乱,pri文件的作用就尤为重要了。简单来说,pri文件就是把pro文件中的一部分放到pri文件中进行一个管理,类似头文件,进行分块管理,分担pro文件的一部分压力,这样一来pro文件看起来就不会显得很臃肿。创建pri文件的步骤。原创 2023-10-13 11:22:38 · 819 阅读 · 0 评论 -
彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)
Local字符集是什么?再把qcom\的所有cpp和h文件都用工具转换成UTF-8+BOM编码,请注意,如果文件转换成UTF-8(无BOM),编译仍会失败.main()函数使用QTextCodec::setCodecForTr(QTextCodec::codecForName(“GBK”));这里只列举大家最常用的3个编译器(微软VC++的cl编译器,Mingw中的g++,Linux下的g++),源代码分别采用GBK和无BOM的UTF-8以及有BOM的UTF-8这3种编码进行保存,发生的现象如下表所示。原创 2023-10-13 10:23:34 · 14320 阅读 · 2 评论 -
【应用】OPC 通讯协议
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2023-10-12 13:46:14 · 276 阅读 · 0 评论 -
QSS样式表的使用
1、先谈谈我们设置样式有几种方法(a)、最简单,也是最直接——在Qt Designer 中添加样式我们在编辑框中添加需要的样式即可,然后点击确定我们就可以看到设置的效果了,这里我们只对QPushButton设置了样式,那我们是不是对界面上每个控件都要单独设置样式呢?当然不需要,我们可以对整个界面设置样式,然后将所有控件的样式都写在其中就可以了。Qt的样式表编辑工具可以帮助我们检验样式是否编写正确。原创 2023-10-12 09:08:40 · 283 阅读 · 0 评论 -
QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2023-10-09 14:51:34 · 1222 阅读 · 0 评论 -
QT通过TCP协议发送结构体数据
做上位机的时候下发数据,数据是一个结构体,这里就阐述一下怎么通过TCP协议发送结构体。我自己写的时候主要通过两种方式,一种是memcpy,另一种是用QDataStream。int age=1;}edwinwzy;这篇博客主要针对TCP发送结构体数据遇到的问题进行了归纳,发单个以及发部分情况都可以实现。原创 2023-10-09 10:01:35 · 383 阅读 · 0 评论 -
Libevent库的介绍以及使用示例
原文链接:https://blog.csdn.net/m0_54355780/article/details/121684841Libevent是一个I/O框架库,具有如下特点:①跨平台支持。②统一事件源。Libevent对I/O事件,信号和定时事件提供统一的处理③线程安全。Libevent使用libevent_pthreads库来提供线程安全支持④基于Reactor模式实现(即主线程负责事件的产生,其余线程负责对事件的处理)原创 2023-10-07 21:08:39 · 208 阅读 · 0 评论 -
QObject::No such slot 接收者::槽函数名(参数)或QObject::connect: No such signal 发送者::信号名(参数)
正确格式:connect(form,SIGNAL(sendListGot(const QString)),this,SLOT(getListGot(const QString)));错误格式:connect(form,SIGNAL(sendListGot(const QString str)),this,SLOT(getListGot(const QString str)));原创 2023-10-05 13:33:12 · 411 阅读 · 0 评论 -
使用libmodbus库开发modbusTcp从站(支持多个主站连接)
【代码】使用libmodbus库开发modbusTcp从站(支持多个主站连接)原创 2023-10-05 10:09:55 · 1544 阅读 · 0 评论 -
Qt、C/C++环境中内嵌LUA脚本、实现LUA函数的调用执行
LUA是一个脚本语言,由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行,可以很方便的嵌入到其他C/C++环境中,如Qt、VS2012等。一般的lua脚本文件的后缀为.lua,移植lua源码异常的简单,下载源码包后,直接编译即可,因为上面我们说过了LUA是用标准C编写的,所以几乎你常见的编程环境它都能编译LUA。LUA源码下载地址: http://www.lua.org/ftp/下载lua-5.1.5.tar.gz然后解压。原创 2023-08-02 13:45:22 · 1479 阅读 · 0 评论 -
C++和Lua交互总结
Lua和C++是通过一个虚拟栈来交互通信的。由C++先把函数名、变量名、table中键放入栈中,然后把函数名、变量名、table中键出栈,并返回对应的值到栈顶,再由栈顶返回C++。Lua调C++:**Lua调用C++的函数:**先把普通的C++函数包装成Lua_CFunction格式,然后注册函数到Lua解释器中,然后由Lua去调用这个模块的函数。原创 2023-08-01 16:06:26 · 1647 阅读 · 0 评论 -
Libmodbus在VS2017下的编译
原文链接:https://blog.csdn.net/weixin_45790559/article/details/105092860。3、在解决方案资源管理器里面删除头文件:modbus-version.h;1、打开文件路径:D:\libmodbus-master\src\win32\configure.js;4、打开:调试——modbus属性——常规——Windows SDK版本,选择10.0.17763.0;5、链接器——所有选项——版本,删除1.0.0。2、打开modbus-9.sln;原创 2023-07-26 13:10:48 · 301 阅读 · 0 评论 -
Qt创建多线程的两种方法
在UI线程下调用QThread的非run函数(其实也不应该直接调用run函数,而应该使用start函数),和执行普通函数无区别,这时,如果这个函数要对QThread的某个变量进行变更,而这个变量在run函数里也会被用到,这时就需要注意加锁的问题,因为可能这个变量前几毫秒刚刚在run中调用,再调用时已经被另外的线程修改了。QObject是一个功能异常强大的类,它提供了Qt关键技术信号和槽的支持以及事件系统的支持,同时它提供了线程操作的接口,也就是QObject是可以选择不同的线程里执行的。原创 2023-05-17 20:49:37 · 1063 阅读 · 0 评论 -
Qt-AES加密库
(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。(2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。(3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。原创 2023-05-10 21:01:16 · 2143 阅读 · 2 评论 -
在Qt中设置程序图标的方法介绍
本文主要介绍在 Qt 中设置程序图标的方法。说明:本文中的应用程序是面向 Windows 操作系统的;本文中使用的 Qt Creator 版本号为:7.0.0;本文中使用的 Qt 版本号为:5.14.2;本文介绍的方法中使用的图标文件需为“ico”格式,且该文件必须包含 ico data。包含 ico data 的 ico 格式图标可由“http://www.ico51.cn/”等网站生成。原创 2023-05-10 16:11:19 · 5157 阅读 · 1 评论 -
QT MD4 MD5 Sha1等几种加密方式
QT 自带有QCryptographicHash类可以进行很方便的进行 md4 、md5等加密。使用方法很简单,直接提供了一个静态的方法。data就是要加密的数据, method是加密的方法,看官方文档选择加密的方式就行。原创 2023-05-10 15:35:07 · 951 阅读 · 0 评论