自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 Qt开发——系统相关3(Qt网络编程)

Qt网络编程的核心API和使用方法。主要内容包括:1) UDP编程使用QUdpSocket和QNetworkDatagram类实现数据收发;2) TCP编程通过QTcpServer监听连接,使用QTcpSocket处理客户端通信;3) HTTP客户端使用QNetworkAccessManager发送请求,QNetworkRequest构造请求,QNetworkReply处理响应。提供了UDP回显服务器/客户端、TCP回显服务器/客户端以及HTTP客户端的完整实现代码,展示了Qt网络编程的基本框架和信号槽机制

2025-11-27 20:30:17 595

原创 Qt开发——系统相关2(Qt多线程)

摘要:Qt通过QThread类实现多线程编程,与Linux线程本质相同。QThread通过重写run()函数定义线程入口,并提供start()、sleep()等API管理线程生命周期。Qt多线程主要用于客户端避免主线程阻塞,提升用户体验。线程安全通过QMutex(互斥锁)、QWaitCondition(条件变量)和QSemaphore(信号量)等机制实现。QMutexLocker利用RAII自动管理锁生命周期,QReadWriteLock优化读写并发访问。典型应用场景包括耗时IO操作(如下载文件)的异步处理

2025-11-26 19:06:20 832

原创 Qt开发——Qt系统相关1(Qt事件&&Qt文件)

本文介绍了Qt框架中封装的操作系统API及其应用。主要内容包括:1) Qt事件机制,包括鼠标、键盘等事件处理;2) 文件操作类QFile的使用方法;3) 定时器事件QTimerEvent的实现;4) 窗口移动和大小改变事件处理;5) QFileInfo获取文件属性的方法。文章通过具体代码示例,展示了如何在Qt中使用这些封装好的系统API来实现常见功能,如事件响应、文件读写、定时任务等,体现了Qt跨平台开发的便利性。

2025-11-26 16:39:17 986

原创 Qt开发——Qt窗口

本文介绍了Qt中主窗口QMainWindow及其组件的使用方法。主要包括:1. QMainWindow的基本结构,包含菜单栏、工具栏、状态栏和中心部件;2. 菜单栏的创建和使用方法,包括通过代码和图形化界面创建菜单、添加菜单项、设置快捷键等;3. 工具栏的创建和设置,包括添加工具按钮、设置停靠区域和浮动属性;4. 状态栏的使用,包括显示消息和添加控件;5. 浮动窗口QDockWidget的创建和控件添加;6. 对话框的使用,包括自定义对话框和Qt内置对话框(消息框、颜色选择、文件选择、字体选择和输入对话框)

2025-11-25 19:10:14 1017

原创 Qt开发——常用控件(布局管理器)

摘要:Qt提供了多种布局管理器(垂直、水平、网格、表单布局)来替代手动布局,解决控件定位不精确和窗口自适应问题。垂直布局(QVBoxLayout)和水平布局(QHBoxLayout)支持嵌套使用,网格布局(QGridLayout)可实现M*N网格效果并支持行列拉伸系数控制。表单布局(QFormLayout)是网格布局的特殊形式,专为两列表单设计。通过QSpacerItem可在控件间添加空白间距。布局管理器需配合控件的SizePolicy属性使用,才能实现理想的拉伸效果。

2025-11-23 21:11:47 1014

原创 Qt开发——常用控件(多元素控件&&容器类控件)

本文介绍了Qt中几种常用的容器类控件及其使用方法。主要包括: 多元素控件: QListWidget列表控件及其核心方法、信号 QTableWidget表格控件的行列操作和单元格管理 QTreeWidget树形控件的节点操作方法 容器类控件: QGroupBox分组框的属性设置和使用 QTabWidget标签页控件的创建、切换和删除操作 实现要点: 详细说明了各控件的属性配置 提供了完整的代码示例演示增删改查操作 介绍了信号与槽的连接方式

2025-11-23 13:51:21 866

原创 Qt开发——常用控件(输入类控件)

本文摘要: 本文详细介绍了Qt框架中常用的输入控件及其使用方法。主要内容包括:1) QLineEdit单行输入框的属性、信号和验证功能实现;2) QTextEdit多行输入框的特性和信号处理;3) QComboBox下拉框的属性和数据加载方式;4) QSpinBox/QDoubleSpinBox数值微调框的应用;5) QDateTimeEdit日期时间控件的属性和计算功能;6) QDial旋钮和QSlider滑动条的使用方法。通过多个实际案例,演示了这些控件的应用场景,涵盖了属性设置、信号处理、数据验证等。

2025-11-21 10:14:31 620

原创 Qt开发——常用控件4(显示类控件)

摘要:本文介绍了Qt中常见控件的属性和使用方法,重点讲解了QLabel、QLCDNumber、QProgressBar和QCalendarWidget四大控件。QLabel可用于显示文本和图片,支持纯文本、富文本和Markdown格式,并可设置对齐、缩进、边距等样式;QLCDNumber专为数字显示设计,支持多种进制和显示风格;QProgressBar用于展示进度,可通过定时器实现动态效果;QCalendarWidget提供日期选择功能,支持多种日期格式和显示方式。文章通过代码示例详细演示了如何实现文本显示

2025-11-19 14:29:09 1000

原创 Qt开发——常见控件3(按钮类控件)

本文介绍了Qt中常用控件的使用方法。首先讲解QPushButton的基本属性和功能,包括设置图标、添加快捷键和实现连发效果。接着介绍单选框QRadioButton,说明如何设置默认选项、分组管理单选按钮以及处理不同信号。最后讲解复选框QCheckBox的使用,展示如何获取多个选项的状态值并显示结果。文中通过代码示例演示了这些控件的具体实现方法,包括图标资源加载、快捷键绑定、按钮分组等实用技巧,为Qt界面开发提供了实践指导。

2025-11-17 14:32:32 694

原创 QT开发——常用控件(2)

本文介绍了Qt控件常用的样式设置方法:1. 透明度控制:通过windowOpacity()和setWindowOpacity()方法设置控件透明度,范围0.0-1.0,并讨论了浮点数精度问题及防御性编程的重要性。2. 光标设置:包括获取/设置控件光标形状、全局光标设置,以及自定义光标图片的方法。3. 字体控制:详细说明了QFont类的属性和使用方法,包括字体家族、大小、粗细等样式设置。4. 其他功能:包括提示文本(toolTip)、焦点策略(focusPolicy)以及CSS样式表(styleSheet)。

2025-11-16 15:31:03 1009

原创 Qt开发——常见控件(1)

本文介绍了Qt中控件的核心属性和使用方法。主要内容包括:1. 控件的通用属性如enabled状态、geometry位置尺寸等,展示了通过代码动态修改这些属性的方法;2. 分析了windowframe对控件几何属性的影响;3. 讲解了windowTitle和windowIcon的设置方法;4. 详细介绍了Qt的qrc资源管理机制,包括如何创建资源文件、添加图片资源并在代码中引用这些资源。文章通过具体代码示例,展示了Qt控件开发的基本流程和注意事项,对Qt GUI开发具有实用指导意义。

2025-11-14 20:23:14 765

原创 MySQL——表的约束

MySQL通过多种约束保证数据合法性和业务逻辑正确性。主要约束包括:非空约束(NOT NULL)确保关键字段不为空;默认值(DEFAULT)设置常用值;列描述(COMMENT)提供字段说明;主键(PRIMARY KEY)保证唯一性和非空性;自动增长(AUTO_INCREMENT)与主键配合生成序列值;唯一键(UNIQUE)确保业务字段不重复;外键维护表间关联完整性。这些约束共同作用,在数据库层面强制数据符合业务规则,避免无效数据插入。其中主键用于标识唯一性,而唯一键侧重业务防重,外键则保证关联数据的存在性。

2025-11-14 13:42:31 950

原创 Qt开发——信号和槽

本文详细介绍了Qt框架中的信号(signal)与槽(slot)机制。首先比较了Linux系统信号与Qt信号的异同点,两者都遵循信号源、信号类型和处理方式三要素。Qt通过connect函数将信号与槽关联,当信号触发时自动执行槽函数。文章阐述了自定义信号和槽的方法,包括参数传递规则、Q_OBJECT宏的作用以及使用emit触发信号。此外还介绍了通过函数命名规则自动连接信号槽、disconnect断开连接以及使用lambda表达式作为槽函数等高级用法。这种机制实现了控件间的解耦,支持一对多和多对多的交互方式。

2025-11-12 18:04:58 695

原创 Qt开发——Qt开发初识(2)

文章介绍了Qt框架下创建"Helloworld"程序的实现方法。首先说明通过代码构造界面的基本流程,包括头文件包含规则、对象创建方式(堆/栈)及Qt对象树管理机制。重点解析了QLabel控件创建、QString字符串处理、编码问题解决方案(GBK/UTF-8),以及使用qDebug进行日志输出。同时演示了可视化设计器中按钮控件的创建和信号槽连接机制,详细说明了connect函数的使用方法和UI文件与代码的关联方式。最后介绍了Qt窗口坐标体系和控件位置设置方法,展示了按钮创建与定位代码实现

2025-11-10 19:30:48 589

原创 MySQL——数据类型

摘要:MySQL数据类型分为数值、字符串、日期等多种类型。数值类型包括整数、浮点数等,可添加unsigned限定无符号值;字符串有定长char和变长varchar,前者效率高但浪费空间,后者节省空间但效率较低;日期类型包括date、datetime和timestamp;集合类型enum为单选,set允许多选。数据类型本身是一种约束,能确保数据完整性和合法性。选择数据类型时应根据实际需求,权衡空间和效率。浮点数存在精度损失,高精度需求建议使用decimal。enum和set实际存储为数字,查询时可使用find

2025-11-09 15:50:57 742

原创 MySQL——表的操作

语法说明:field 表示列名 datatype 表示列的类型character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准创建数据库user_db,使用数据库不同的存储引擎,创建表的文件不一样user1 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:user1.frm: 表结构user1.MYD: 表数据user1.MYI: 表索引。

2025-11-08 17:21:24 408

原创 MySQL——库的操作

本文介绍了MySQL数据库的基本操作,包括创建和删除数据库的语法,重点讲解了字符集(CHARACTER SET)和校验规则(COLLATE)的概念及设置方法。文章详细说明了如何查看系统默认字符集、校验规则以及支持的字符集类型,并通过实际案例演示了不同校验规则(utf8_general_ci和utf8_bin)对数据库查询和排序的影响。此外,还介绍了数据库的修改、备份(mysqldump)与恢复(source)操作,以及查看数据库连接状态(show processlist)的方法。

2025-11-08 16:23:47 671

原创 MySQL——数据库基础

数据库管理系统解决了文件存储数据的局限性,提供了更安全、高效的数据管理方案。文章对比了文件存储与数据库的差异,介绍了主流数据库类型(MySQL、Oracle等)及其特点。重点讲解了MySQL的架构(三层结构)、基本操作(连接、创建库表)、服务管理以及SQL分类(DDL、DML、DCL)。同时揭示了数据库本质仍是文件存储,但通过专业服务实现结构化组织和管理,并解释了存储引擎的关键作用。通过实例演示了数据库操作与底层文件的对应关系,帮助理解数据库的工作原理。

2025-11-08 14:51:08 644

原创 Qt开发——环境搭建

Qt开发环境需要按照3个部分1.C++编译器(gcc,cl.exe......不是Visual Studio) 编译器!= IDE 编译器只是IDE调用的一个程序2.Qt SDK (SDK =>软件开发工具包,当然一般的SDK中会内置编译器,没有的才需要装编译器)具体安装过程中记得把对应的C++编译器给一起勾选上。3.需要有一个Qt 的集成开发环境(IDE)1)Qt官方提供的Qt Creator(最容易入门,开箱即用,不需要任何额外的配置;虽然使用过程会有bug)

2025-11-08 10:52:47 1200

原创 QT开发——QT开发初识(1)

Qt是一个跨平台的C++图形用户界面应用程序框架,主要用于桌面应用开发。客户端程序指直接与用户交互的软件(如浏览器、音乐播放器等),有些需要服务器支持(如滴滴),有些则完全独立(如画图板)。Qt支持Windows、Linux、Mac等多平台开发,相比Windows API、MFC等传统方案更简单高效,具有跨平台性、简化内存管理等特点。其发展历史可追溯至1991年,现支持包括移动端和嵌入式在内的多种平台,在工业设备等领域有广泛应用。Qt通过限制编码自由度提高可靠性,是当前GUI开发的重要工具之一。

2025-11-07 19:11:11 704

原创 Linux网络——连接、TCP全连接队列&&TCPdump抓包

本文通过实验探究了TCP服务器中listen()函数的第二个参数backlog的作用。实验发现当服务器不调用accept时,客户端仍能完成三次握手建立连接,但已建立连接数存在上限(backlog+1)。backlog参数控制了全连接队列的长度,该队列用于存储已完成三次握手但未被accept的连接。文章详细分析了Linux内核中TCP连接管理的实现机制,包括半连接队列和全连接队列,以及底层数据结构如tcp_sock、inet_connection_sock等的组织关系。实验还使用tcpdump抓包分析了TCP

2025-11-04 22:51:37 1805

原创 Linux网络——传输层协议UDP&&TCP

本文深入解析了TCP/IP协议栈中的关键概念,重点阐述了传输层的核心机制。首先对比了OSI七层模型与TCP/IP四层模型的差异,指出应用层、表示层和会话层被合并的原因。然后详细讲解了UDP协议的特性:无连接、不可靠传输、面向数据报以及16位端口号的作用机制。针对TCP协议,文章系统性地分析了其可靠性保障机制,包括确认应答(ACK)、超时重传、三次握手/四次挥手过程,以及滑动窗口、流量控制和拥塞控制三大核心技术。特别强调了TCP面向字节流的传输特性带来的粘包问题及解决方案,最后讨论了TCP通信中的各种异常情况

2025-11-04 11:44:10 1266

原创 Linux网络——HTTP

HTTP协议解析与实现 摘要:本文详细介绍了HTTP/1.1协议的核心概念和实现过程。主要内容包括: HTTP协议基础:无状态、基于TCP的应用层协议,通过URL定位资源,默认端口80(HTTP)和443(HTTPS)。 协议实现:构建了完整的HTTP服务器框架,包括请求解析(反序列化)、响应生成和资源处理。 关键组件: 请求处理:解析请求行、头部和参数(GET/POST) 响应构建:状态码、Content-Type处理和多类型资源支持 资源管理:静态文件服务和动态请求处理 高级特性:实现了长连接、Cook

2025-10-30 00:28:13 1132 1

原创 Linux——守护进程

作业是针对用户来讲,用户完成某项任务而启动的进程,一个作业既可以只包含 一个进程,也可以包含多个进程,进程之间互相协作完成任务, 通常是一个进程 管道。Shell 分前后台来控制的不是进程而是作业 或者进程组。一个前台作业可以由多 个进程组成,一个后台作业也可以由多个进程组成,Shell 可以同时运⾏一个前台 作业和任意多个后台作业,这称为作业控制。下面的进程组就可以看作一个作用作业号是[1]在写一个。

2025-10-26 22:06:37 1018

原创 Linux网络——应用层序列化反序列化

之前实现的TCPservercommon中对于client端的接收直接使用recv是有问题的,tcp是面向字节流的,如果传的命令ls -a -l它不能保证client传的这行命令一定是完整的,也许它只传了一半而另一半在下一行呢?就像文件读取一样,对于向文件中写入不同的数据类型,我们很轻易就能做到,但是如果将文件中的数据类型准确的读取出来就十分困难了要想解决这个问题,首先要对协议再一步了解。之前我们提到协议是一种"约定",计算机与计算机之间的约定,通过这种约定来减少计算机的通信成本。

2025-10-23 21:23:47 979

原创 Linux网络编程——TcpServer套接字

本文实现了一个基于TCP协议的服务器框架,包含单进程、多进程、多线程和线程池四个版本。主要内容包括: 基础TCP服务器实现 使用socket()创建套接字 bind()绑定IP和端口 listen()监听连接请求 accept()接受客户端连接 read/write进行数据通信 多进程版本 通过fork()创建子进程处理连接 父进程关闭客户端套接字,子进程关闭监听套接字 使用信号处理避免僵尸进程 多线程版本 使用pthread_create创建线程 线程分离避免资源泄漏封装线程数据传递参数 线程池版本...

2025-10-15 18:20:34 678

原创 Linux网络编程——UdpServer套接字

本文介绍了UDP服务器端和客户端的基本实现框架。服务器端通过socket()创建套接字,bind()绑定端口,使用recvfrom()接收数据并用sendto()回传;客户端自动绑定随机端口,通过sendto()发送数据并接收服务器响应。重点说明了网络编程中端口转换(htons/ntohs)、地址绑定(INADDR_ANY)等关键点,并提供了完整的代码实现和测试方法。

2025-10-05 17:08:16 1146 1

原创 Linux——多线程(五)

thread.hppmain.cc此时会报错:无效使用非静态成员函数...主要原因是成员函数包含this指针而thread.hpp中线程所要执行函数的参数为空:using func_t = std::function;,导致参数类型不匹配有两种解决方法方法一:在Print函数前面加上static。

2024-07-10 02:59:31 712 1

原创 Linux——多线程(四)

这是之前基于阻塞队列的生产消费模型中Enqueue的代码缺点:当一个线程往阻塞队列中插入时,必须要满足一个条件"临界资源还没满",否则就需要放到条件变量的等待队列中去。而判断临界资源是否为满,然后再进入临界区访问临界资源,才能判断临界资源是否为满。那么只要我们对临界资源整体加锁,就默认会对这个临界资源整体使用(吗?实际上可能是:一份临界资源被划分为多个不同的区域,而且运行多个线程同时访问不同的区域。在访问临界资源之前,我们无法知道临界资源的情况。多个线程不能同时访问临界资源的不同区域。

2024-07-10 02:38:01 1027 1

原创 Linux——进程间通信一(共享内存、管道、systrem V)

什么是管道?一个文件打开两次,那么在操作系统中会有2个struct file 但是这两个struct file指向同一个缓冲区若父进程3为读端,4为写端,子进程也一样。那么子进程写入,父进程读取缓冲区内容,这是父子进程看到了同一块资源。这种基于文件的,让不同进程看到同一份资源的通信方式叫做管道管道只能被设计成单向通信。

2024-07-06 23:17:57 1140

原创 Linux——多线程(三)

在上一篇博客中我们讲到了在加锁过程中,线程竞争锁是自由竞争的,竞争能力强的线程会导致其他线程抢不到锁,访问不了临界资源导致其他线程一直阻塞,造成其它线程的饥饿问题,想要解决此问题又涉及一个新概念。

2024-06-02 16:53:32 1020 1

原创 Linux——多线程(二)

但是还有另外的问题:加锁,线程竞争锁是自由竞争的,竞争能力强的线程会导致其他线程抢不到锁,访问不了临界资源导致其他线程一直阻塞,造成其它线程的饥饿问题

2024-06-01 15:50:19 1043

原创 Linux——多线程(一)

教材中的概念: (有问题?线程是进程内部的一个执行分支,线程是CPU调度的基本单位之前我们讲的进程:加载到内存中的程序,叫做进程---(修正)---->进程=内核数据结构+进程代码和数据。

2024-05-28 22:50:01 1305

原创 Linux——进程信号(二)

在进程信号(一)中我们已经讲到了信号的保存,那么接下来要讲信号的处理了。信号的处理主要要回答3个问题:1.信号什么时候被处理的?2.信号如何被处理的?3.捕捉信号还有其他方式吗?首先回答问题一:信号在合适的时候被处理,那什么是合适的时候呢?这就要先看什么是内核态和用户态了。

2024-05-25 16:28:02 1209 1

原创 Linux——进程信号(一)

什么是信号?结合实际红绿灯、闹钟、游戏中的"!"等等这些都是信号。以红绿灯为例子:一看到红绿灯我们就知道:红灯停、绿灯行;我们不仅知道它是一个红绿灯而且知道当其出现不同的状况时我们应该做出怎么样的行为去应对。对于红绿灯:我们之前受过的教育,让我们能够识别这个红绿灯(即使它还未出现在我们眼前),也就是说你能识别"红绿灯"当绿灯量了后我们不一定要直接走,也可以等一会再走(也就是说接收信号后我们不一定要立刻产生对应的行为)当红灯亮了之后,我们可以玩手机,要记得这个时候还是红灯。

2024-05-23 20:06:21 1540 2

原创 Linux——基础IO2

之前在中我们讲的都是(进程打开的文件)被打开的文件那些未被打开的文件呢?大部分的文件都是没有被打开的文件,这些文件在哪保存?磁盘(SSD)OS要不要管理磁盘上的文件?(如何让OS快速定位一个文件)要(通过路径快速定位文件)

2024-05-05 21:16:37 1229

原创 Linux——基础IO(1)

铺垫:文件1.之前我们讲过文件=内容+属性磁盘中创建一个空文件也要占空间(就算内容为空,文件属性也占空间)文件操作=文件内容的操作+文件属性的操作有可能在操作文件的过程中既改变内容又改变属性2.访问文件之前,都得先打开文件修改文件是通过执行代码的方式完成修改,文件必须加载到内存之中(打开文件)——冯诺依曼体系决定:CPU只能从内存中对数据做读写3.是谁在打开文件?进程在打开文件(程序被执行,进程被调度,fopen打开文件)通常我们打开文件、访问文件、关闭文件都是进程在进行相关操作;

2024-05-05 12:45:53 956

原创 C++11——新特性(二)

前面我们列表初始化、变量类型推导、STL中的一些新变化,已经右值引用的移动语义。本篇博客将续上篇,继续介绍C++11的新内容并且补充上篇文章中一些没有介绍完的内容。右值引用引用左值及其一些更深入的使用场景分析、完美转发、模板的可变参数、lambda表达式、包装器等。

2024-04-09 00:03:21 880

原创 C++11——新特性(一)

但是当函数返回对象是一个局部变量,出了函数作用域就不存在了,就不能使用左值引用返回,只能传值返回。例如:bit::string to_string(int value)函数中可以看到,这里只能使用传值返回,传值返回会导致至少1次拷贝构造(如果是一些旧一点的编译器可能是两次拷贝构造)。

2024-04-05 23:42:46 959

原创 位图和布隆过滤器

有误判率,即存在假阳性(False Position),即不能准确判断元素是否在集合中(补救方法:再建立一个白名单,存储可能会误判的数据)

2024-04-04 17:46:14 681

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除