- 博客(40)
- 问答 (1)
- 收藏
- 关注
原创 1900年-2100年公历转农历数据
一共24bit:前4bit:这一年是闰年才有意义,1代表闰大月(30天),0代表闰小月(29天)。中间12bit:每1bit代表一个月,1为大月,0为小月。后4bit:代表这一年的闰月年份,为0则不闰,非0为闰的月份。
2024-05-13 18:46:31 426
原创 CANopen学习笔记
CANopen在设计时,对其定义为小网络、控制信号的实时通讯报文传输采用CAN标准帧格式。即11bit的ID域,以尽量减小传输时间。网络控制报均采用数据最小字节数。比如心跳报文,只有1个字节数据。实时更新的过程数据无需接收方报文应答。即采用生产消费模型,降低总线负载。需要接收方确认的配置参数一般都时采用快速单字传输。即1个报文最多传达1个32bit的参数变量,避免了分帧引起的实时性降低。以上这些定义都是为了节约时间开销,最大限度的保证实时性。
2024-04-28 15:16:29 1413
原创 【Qt】使用QPixmap优化绘图
在绘制比较复杂的控件时,需要在paintEvent中书写大量的绘图代码。如果代码量巨大,且控件经常刷新,应用程序就会频繁的绘制这一坨大量的绘图代码,非常的浪费计算机资源。例如仪表盘,仪表盘需要绘制背景,边框,刻度,刻度数值,指针等,如果是涉及到渐变色,不规则图形过多的话,代码量就会很大,动辄一二百行去实现。绘图优化的原理:将控件绘图部分根据频繁刷新度分离代码,例如仪表盘的背景和刻度,以及刻度数值是不需要频繁更换的,这些内容相较固定。顶多是控件大小发生变化,刻度区间发生变化等等情况时才需要重新绘制。
2023-09-26 21:47:01 771
原创 【通信协议】Modbus
区块访问长度访问方式说明线圈位(bit)读/写可通过应用程序改写离散量输入位(bit)只读数据由IO系统提供输入寄存器字(word)只读数据由IO系统提供保持寄存器字(word读/写可通过应用程序改写Modbus协议允许设备将四种数据分别映射到不同存储区块中,各个区块之间互相独立,使用不同的功能码。可以读取到不同的数值。Modbus协议也允许设备将四种数据映射到统一存储区块中,这样通过不同的功能码读取数据可能会得到相同的数据,比如输入寄存器和保持寄存器为同一物理区块。
2023-09-15 22:31:45 398
原创 【Qt】MQTT
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,主要用于在低带宽和不稳定网络环境下进行物联网设备之间的通信。MQTT采用发布-订阅模式,基于TCP/IP协议进行通信,具有开销低、传输效率高、易于实现和扩展等优点。它适用于各种硬件设备,包括传感器、嵌入式系统和移动设备。在MQTT中,设备可以发布消息到特定的主题(Topic),其他设备则可以订阅这些主题,以接收相应的消息。
2023-09-15 11:44:16 333
原创 【Qt】自定义控件
在实际的项目开发中,通常情况下使用QSS即可改变原生控件外观,而QSS是通过Qt的样式引擎解析并设置样式参数,在paintEvent中通过这些样式参数绘制的。尽管如此,Qt的原生控件或许仍旧满足不了我们的需求,所以经常会遇到需要自定义控件的场合。例如需要一个开关样式的按钮,Qt中并没有提供。下面就分享一下Qt自定义控件的一些方法。 在Qt中自定义控件的方法有多种,常用的方法有: 顾名思义,组合控件就是将多个控件元素组合为一个整体,然后以这个整体为单位进行界面编程。
2023-09-15 01:14:15 1837 2
原创 【Qt】程序仅运行一个实例
QtSingleApplication是一个用于创建单例应用程序的Qt库。通过使用QtSingleApplication,您可以确保在同一时间只有一个应用程序实例在运行。这在某些情况下非常有用,例如当希望限制特定应用程序只能运行一个实例时。使用QtSingleApplication,可以检查当前是否已经有一个实例正在运行,并且可以与已经运行的实例进行通信。这样,可以阻止多个实例同时运行,并确保一些应用程序的行为符合需求。
2023-09-14 14:36:57 448
原创 【C++】20种设计模式之(单例模式)
单例模式的概念非常简单,即应用程序中只能有一个特定组件的实例。例如将数据库加载到内存中并提供只读接口的组件是单例模式的主要应用场景之一,因为浪费内存存储多个相同的数据集是没有意义的。另外,单例模式的使用场景还有:日志记录、配置信息、对象控制、系统状态等。
2023-09-08 20:53:42 77
原创 【C++】20种设计模式之(工厂模式)
顾名思义,工厂模式,用于封装对象的实例化过程,就像是生产产品的工厂,只不过,在代码中,它生产的是对象的实例,出厂的不是产品,而是对象的实例化指针。工厂模式通过定义一个公共的接口来创建对象,而不是使直接在代码中使用new关键字实例化对象。这样做的好处是可以降低代码的耦合度,并提供更好的拓展性和灵活性。抽象产品接口它定义产品的通用接口,即所有具体产品都要实现的方法。具体产品类它们实现了抽象产品接口,并定义了具体产品的特定实现。工厂类。
2023-09-05 17:27:25 82
原创 【Qt】QTableView中的部件元素
QTableView、QAbstractTableModel、QStyledItemDelegate和QSortFilterProxyModel是Qt框架中一组常用的类,用于处理和展示表格数据。QTableView是Qt框架中用于显示和编辑二维表格数据的类。它提供了一个可视化的表格界面,可以显示数据并允许用户进行编辑和交互操作。QAbstractTableModel是Qt框架中的一个抽象基类,用于实现自定义的表格数据模型。
2023-09-05 13:17:42 113
原创 【C++】智能指针
手动管理内存,使用new、delete与C++中最常见的BUG——内存泄漏息息相关。尽管都知道使用new申请一块内存都应手动使用delete释放这块内存,但是随着代码复杂度的提升,一个指针或许会在多个函数中频繁传递,很多时候会使程序员犯错误,忘记释放内存,或者不知道应该在哪里释放内存。C++中也提供了一种方法——智能指针,它可以自动地释放对象所占用的内存,并避免常见的内存泄漏和悬挂指针等问题。不过,智能指针也有其限制和潜在的开销,因此在使用时需要根据具体情况进行权衡和选择。
2023-09-04 13:15:35 46
原创 【C++】C++虚函数表和多态
对于虚函数表和多态的掌握,意味着在实际的开发过程中,程序员能够充分利用C++面向对象编程中的多态技术,写出高拓展性以及耦合度比较低的优质代码。另外,在C++面试的过程中,这个问题也是问的比较多的,如果不懂这个问题,就代表面试者对C++的掌握还是比较初级的阶段。接下来,我们就站在编译器的角度去探究C++幕后的秘密。首先,我们观察一下,。接着,就会引出。然后再涉及到,之后,就要看一看,最后把这些知识点串起来,再引出。
2023-09-03 22:56:07 70
原创 【C++】函数指针
有些地方给出这样的定义形式,是一样的:其中returnType为函数返回类型;pointerName为函数指针名称;param list为参数列表;参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称,这一点和函数原型非常类似。第一个括号(*指针变量名)这样就是函数原型,返回类型行为返回类型*
2023-09-03 14:49:15 62
原创 【Qt】套接字Socket之TCP
在Qt框架中,用于网络通信的套接字(Socket)类主要包括QTcpSocket和QUdpSocket。QTcpSocket用于基于TCP协议的客户端和服务端通信;QUdpSocket用于基于UDP协议的通信。
2023-08-25 15:44:44 171
原创 【Qt】SQLite数据库
SQLite是一种嵌入式关系型数据库管理系统,它是一个软件库,提供了一个自包含、无服务器、零配置的、事务性的SQL数据库引擎。与传统的数据库管理系统不同,SQLite不需要独立的服务器进程,不需要在系统中配置。SQLite具有轻量级、高度可靠、易于使用的特点。它广泛应用于移动设备、嵌入式系统和小型应用程序中,但也可以在更大规模的应用中使用。SQLite可以跨平台运行(Linux、Mac OS-X、Android、IOS、Windows)。
2023-08-24 17:40:10 784
原创 【Qt】HTTP请求和处理响应
Qt提供了一个名为QNetworkAccessManager的类来处理HTTP请求,使用QNetworkAccessManager,可以发送HTTP请求并接收响应,以便程序与服务器进行通信。
2023-08-23 14:06:16 705
原创 【Qt】多线程
注意:QRunnable和QThread很相像,都有一个run函数,在run函数为在线程内执行的代码。但是不同的是,QRunnable本身并不创建一个新线程,它需要与QThreadPool线程池一起使用。该行代码是在线程结束后,自动销毁此线程。
2023-08-23 10:18:00 85
原创 【Qt】解析YAML文件
YAML文件是一种人类可读的数据序列化格式,常用于配置文件和数据交换。它使用缩进和换行来表示层级关系,具有简洁、可读性强的特点。
2023-08-23 09:48:40 1189
原创 【Qt】解析配置文件INI
INI文件的语法简单,结构清晰,便于阅读。网上有很多INI文件相关的资料,但是很少有看到说明INI文件的起源和发展的文章。其实我也好奇这点,接下来,我就先介绍INI文件的起源和发展,然后介绍INI文件的语法,以及Qt中如何读取和编辑INI文件。
2023-08-22 18:03:11 1276
原创 【Qt】解析XML
以上示例只是简单的使用了Qt解析XML格式的文档,可以通过Qt官方文档来学习对XML更为细致全面的操作。另外,在Qt5中有QXmlQuery类来支持XPath查询XML文档的内容,Qt6中已经不支持。
2023-08-22 15:27:30 1257
原创 【Qt】Json解析
它是一种轻量级的、开放的、易于阅读和理解的数据格式,适用于广泛的应用场景。正是由于Json格式的数据的常用性,所以很多时候我们使用Qt框架来写程序是绕不开它的。而Qt自然也有专门的类用来读写Json格式的数据。
2023-08-21 17:19:50 3839
原创 【软件安装及文件夹安排的建议】
有很多人在安装软件时,将软件包下载下来,然后对着安装引导程序疯狂的点击下一步下一步,直至安装完成。当然也有人会对盘符有一个大致的区分,如:C盘为系统盘,D盘为软件盘,E盘为文件盘...。这样划分是明确的,但是当安装软件时,自定义安装路径,只选到D盘就完事儿了。D盘里还是一团糟。也许有人可以做到乱中有序,也许有人有自己独特的归纳方式,在自己的PC中查找一个文件是轻而易举的事情。这里,我提供一种归纳文件的方法,可以让各类软件的安装文件更有序,分明。
2023-08-17 17:26:52 4620 2
原创 【组合中英文字体为新字体】
最近在用Qt做各种进制的输入框,发现很多字体的字母或数字不是等宽的,这就造成相同长度的字符(英文和数字)总长度不一致,很不美观。而字符等宽的字体很多不支持中文,即使同时支持中英文,要么是英文样式不符合期望,要么是中文样式不符合期望。于是,就诞生了一个大胆的想法,可否将符合期望的中文字体和符合期望的英文字体合并成为一个新字体呢?于是,就在网络上搜索相关文章,尚好,找到了一篇文章,并且成功合并。为了防止以后这篇文章消失,或找不到,特意将此次合并字体的过程记录下来,以便以后有相同需求时回顾。
2023-08-17 15:55:26 2414 2
原创 【密码学】SM2签名预处理
国密SM2(商用密码算法)是中国商业密码算法体系中的一种非对称加密算法,由中国国家密码管理局于2010年发布。它是基于椭圆曲线加密算法(ECC)的一种加密算法。SM2算法使用椭圆曲线密码体制(ECC)来实现公钥密码体系中的数字签名、密钥交换和数据加密功能。它具有安全性高、算法效率高的特点,并且被广泛应用在数字证书、加密通信、电子支付等领域。SM2算法采用的椭圆曲线是由国家密码管理局公布的标准曲线参数,确保了算法的安全性和可信度。
2023-07-21 15:46:03 1498
原创 【动态库加载原理】
总结起来,动态库加载的原理是通过运行时链接器将库文件与目标程序进行关联,将库文件中的函数和变量加载到目标程序的内存空间中,使得目标程序在运行时能够调用动态库中的函数和使用其中的变量。运行时加载:当目标程序运行时,操作系统的动态链接器(或称为运行时链接器)负责加载动态库。库的编译:动态库是编译器将源代码编译为目标代码后得到的可重定位文件,它包含了库中的函数、变量和其他资源。库的链接:在编译目标程序时,链接器会解析目标程序中对动态库的引用,并将这些引用与库的符号进行关联。
2023-07-21 14:27:03 642
原创 【Qt】富文本框架(三、文档布局)
每个文档的布局是由QAbstractTextDocumentLayout类的一个子类管理的。该类为布局和呈现引擎提供了一个公共接口。默认呈现行为目前在私有类中实现。这种方法使创建自定义布局成为可能,并提供了在准备打印页面或导出为可移植文档格式(Portable Document Format, PDF)文件时使用的机制。
2023-07-10 11:37:16 206
原创 【Qt】富文本框架(二、富文本游标)
文档可以通过QTextCursor类提供的接口进行编辑;游标可以使用构造函数创建,也可以从编辑器小部件获取。游标用于执行编辑操作,这些操作与用户能够在编辑器中执行的操作完全对应。因此,关于文档结构的信息也可以通过游标获得,这允许对结构进行修改。使用面向光标的编辑界面使得编写自定义编辑器的过程对开发人员来说更加简单,因为编辑操作可以很容易地可视化。QTextCursor类还维护关于它在文档中选择的任何文本的信息,同样遵循一个在概念上类似于用户在编辑器中选择文本的操作的模型。
2023-07-10 11:29:18 218
原创 【Qt】富文本框架(一、富文本文档)
表是一种特殊类型的框架,它由许多单元格组成,排列成行和列,每个单元格都可以包含进一步的结构和文本。可以将其他文档元素组合在一起的元素通常是qtexttobject的子类,分为两类:将文本块组合在一起的元素是QTextBlockGroup的子类,将框架和其他元素组合在一起的元素是QTextFrame的子类。块也用于表示列表项。因此,块可以定义自己的字符格式,其中包含关于块级装饰的信息,例如用于列表项的项目符号类型。每个表格单元格都是一个文档元素,具有自己的字符格式,但它也可以包含其他元素,如框架和文本块。
2023-07-10 10:49:30 1438
原创 【Qt】不限制QString长度的进制转换
本文讨论二进制、八进制、十六进制三者之间不限制QString长度的进制转换算法。对于涉及十进制且不限制QString长度的进制转换,本人能力有限,不能解决该问题,故不做讨论。
2023-06-27 15:09:03 537
原创 【Qt】QString,QByteArray, char* 互相转化。
本文主要阐述三者之间的互转,或许有多种方式,本文的方式只是其中的一部分。由于有时需要在控件中显示十六进制数据,则涉及到十六进制数据和字符串之间的转换,故包含,以及。
2023-06-27 13:33:58 2751
转载 【软件更新方式】
还是Chrome想出来的,双目录更新,把就版本先复制到另一个目录,然后更新这份新复制的,下次用户启动的时候就直接启动新版本。,检测是否有更新,就是把本地版本号发给服务器,服务器会返回一个配置文件,里面表明是否有新版本,并且带有新版本的下载地址,更新程序按照URL下载新版本的安装程序,然后执行这个安装程序,用户根据安装程序提示进行更新。在需求的推动下,现代客户端的升级程序已经相当复杂了,包括了支持灰度放量的新版本检测,http断点续传下载,MD5完整性校验,bsdiff/courgette。
2023-05-25 14:54:07 344 1
原创 【C++】预编译指令
C++中的pragma指令是一种特殊的编译器指令,用于控制编译器的处理方式,例如告诉编译器如何处理警告和错误信息,如何优化代码等等。具体来说,pragma指令可以用于以下几个方面:1. 编译器控制#pragma once:用于保证头文件只被编译一次,避免多次包含同一头文件。#pragma warning:用于设置警告信息的级别和处理方式。#pragma error:用于生成编译错误。2. 代码优化#pragma optimize:用于控制代码生成的优化级别,例如最大化代码速度或最小化代码大小等。
2023-04-02 15:45:37 844
原创 【C++】关键字
C++中static关键字可以用于函数、变量和类中。它的作用不同,具体如下:1. 函数中的static关键字:当函数的返回值为static时,将该函数称为静态函数。该函数只能在当前文件中访问,不能在其他文件中被使用,因此它隐藏了自己的实现,是一种增强代码模块化的方式。同时,该函数也不需要再被链接器进行链接。2. 变量中的static关键字:当变量的声明时加上static关键字,则该变量为静态变量。
2023-04-02 15:17:39 195
原创 【Qt】自定义标题栏
功能包含:窗口最大化,最小化,关闭;双击标题栏最大化或复位;鼠标按压标题栏可以拖拽窗体位置;鼠标滑过窗口边缘位置时切换鼠标样式;鼠标在窗口边缘位置按压后移动鼠标可以缩放窗体。
2023-04-01 13:49:00 3345 2
原创 【Qt】两个不同位置的文件夹放在同一个目录树中
通过继承QTreeView实现树目录的视图。将两个来源不同的文件夹放置在同一个目录树中。比如C盘中的一个文件夹和D盘中的一个文件夹在同一个树状视图中同级显示。
2023-03-07 11:40:46 628 6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人