C/C++
文章平均质量分 71
C++从0基础,到全栈开发
霸道小明
种一棵树最好的时间是十年前,其次是现在。如果你十年前没有种,那就现在种。
展开
-
QString、QLatin1String、QStringLiteral
但是,函数只接受QString参数的函数时,无论我们给一个字面字符串或QLatin1String,都会隐式构造一个临时的QString对象,构造这个对象需要在栈上申请一定的内存空间,然后把字符串拷贝过去,如果这样的调用比较多,那还是一笔不小的开销。它将字符串传递给函数时,宏在编译时,从字符串文字生成QString数据,QString的内部数据将在编译时生成,在运行时不会发生任何转换或内存分配,使用QStringLiteral来代替C++中的双重数值传递将会在编译的时候显著的提升时间。原创 2023-01-08 16:54:05 · 833 阅读 · 1 评论 -
Qt—QPainter基本图形绘制详解
1、QPainter 类在小部件和其他绘制设备上执行低级绘制。2、QPainter 提供了高度优化的功能来完成大多数图形GUI程序所需的工作。它可以画从简单的线条到复杂的形状。它还可以绘制对齐的文本和像素图。QPainter 可以对继承 QPaintDevice 类的任何对象进行操作。3、QPainter 与 QPaintDevice 和 QPaintEngine 类一起构成了Qt绘制系统的基础:QPainter 是用于执行绘图操作的类。QPaintDevice 表示可以使用 QPainter 在其上绘制的原创 2023-01-07 22:46:46 · 6205 阅读 · 2 评论 -
Qt—事件处理
Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等。Qt中,任何QObject子类示例都可以接收和处理事件。实际编程中通常实现部件的paintEvent()、mousePressEvent()等事件处理函数来处理特定部件的特定事件。每个程序的main函数最后都会调用QApplication类的exec()函数,它会使Qt应用程序进入到事件循环,使应用程序在运行的时候接收各种事件。原创 2023-01-06 11:15:23 · 660 阅读 · 0 评论 -
QT—QPalette调色板类
Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。原创 2023-01-06 11:03:55 · 1265 阅读 · 0 评论 -
Qt样式表语法
使用样式表时,每个部件被看作拥有4个同心矩形的的盒子,四个矩形的内容分别为内容(content)、填衬(padding)、边框(border)、边距(margin)。此例中QPushButton#okButton代表的是单一对象,而不是一个类的所有实例,所以okButton的文本颜色会是灰色的。部件有效的样式表示通过部件的祖先样式表和QApplication上的样式表合并得到的,对于一些复杂的部件修改样式,可能需要访问它们的子部件,如QComboBox的下拉按钮,QSpinBox的向上、向下箭头灯。原创 2023-01-03 15:55:12 · 813 阅读 · 0 评论 -
QT部件透明阴影效果与不规则窗体
在页面布局中添加一个Label标签用来显示图片,应用程序大小设置成与图片大学校一致。方法,传入一个0~1之间的值来表示透明度;1表示不透明,0表示完全透明。在构造函数中初始化,通过setMask( )方法设置遮罩。重写printEvent( )方法,将图片绘制到应用程序上。之后设置窗体透明,部件不透明时就可以出现窗体班透明效果。将准备好的小黄人png图片添加到项目资源中。需要重写paintEvent( )方法。将窗体外形设置成小黄人形状。设置窗体透明,部件不透明。设置整个窗体透明,调用。原创 2023-01-06 11:26:11 · 1252 阅读 · 3 评论 -
QT—5种标准对话框使用详解
对话框是 GUI 程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。所谓标准对话框,是 Qt 内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。这些对话框在所有程序中几乎相同。Qt常用的内置对话框有QFileDialog、QColorDialog、QFontDialog、QInputDialog和QMessageBox。原创 2022-12-17 19:27:01 · 9122 阅读 · 1 评论 -
QT—常用容器 QStringList,QVector,QMap,QHash,QVariant
QMap与QHash差别:①QHash比QMap查找速度更快。②QHash以任意顺序存储,QMap以Key顺序存储数据。③QHash的Key必须提供operator==()及一个全局的qHash(Key)函数,而QMap的Key必须提供operator原创 2022-12-15 09:35:04 · 3539 阅读 · 0 评论 -
QT—QList与QLinkedList类的常用方法
QList维护了一个指针数组,数组元素指向每一个链表项,因此QList 提供了基于下标的快速访问。QLinkedList是一个链式列表,不能使用下标访问,与QList相比,当对一个很大的列表进行插入操作时,QLinkedList更高效。原创 2022-12-14 10:35:14 · 3672 阅读 · 0 评论 -
QT—QString类
隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。隐式共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递的数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。数据相同时,执行浅拷贝,仅复制指向数据块的指针,数据不同时则执行深拷贝。隐式共享技术可以大大降低对内存的开销及CPU资源的消耗,很大程度提高应用程序的运行效率。QString类采用16位的Unicode值(两字节)保存数据,Unicode把所有语言都统一到一套编码里,Unicode提供、、原创 2022-12-13 16:04:37 · 1551 阅读 · 0 评论 -
QT—常用窗口部件
QWidget类是所有部件对象的基类,被称为基础窗口部件,继承关系详看QWidget类关系图。QWidget提供自我绘制和处理用户输入等基本功能,如接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。一个没有父窗口部件的窗口部件一直是顶级窗口部件。非顶级窗口部件是父窗口的子部件。原创 2022-12-12 09:15:36 · 1088 阅读 · 0 评论 -
Reg注册表读写
在Windows 95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。按照这一原则,Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表,用来管理应用程序和文件的关联、硬件设备说明、状态属性以及各种状态信息和数据等。我们可以通过win+R,输入regedit 查看注册表编辑器。RegCreateKeyW( )函数 参数hKey打开的注册表句柄, 或是以下预定义键之一。要创建表项的名称,必须是hKey参数原创 2022-12-04 17:46:31 · 1501 阅读 · 0 评论 -
Config配置文件读写
配置文件本质上是包含成功操作程序所需信息的文件,这些信息以特定方式构成。它们不是在程序中进行硬编码,而是用户可配置的,通常存储在纯文本文件中。原创 2022-12-01 22:53:51 · 985 阅读 · 1 评论 -
C语言文件操作
FILE为C语言提供的文件类型,它是一个结构体类型,用于存放文件的相关信息。文件打开成功时,对它作了内存分配和初始化。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。原创 2022-12-01 22:26:27 · 2240 阅读 · 0 评论 -
Win32API操作文件
在Windows编程中CreateFile函数是用得非常多的,不仅可以打开文件,还可以打开管道、邮槽、通信资源、磁盘设备(早期Windows),控制台、目录。该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性访问文件或设备以获取各种类型的I/O。原创 2022-12-01 21:31:41 · 1806 阅读 · 0 评论 -
MFC文件操作
MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘输入输出功能。通过他的派生类可以间接的支持文本、文件、内存文件等。原创 2022-12-01 20:58:01 · 4824 阅读 · 0 评论 -
动态链接库dll详解
使用动态库前要先将.dll文件加入到程序文件目录下第一种方法:在程序里添加#pragma comment(lib,"1124TDll.lib")代码第二种方法:将lib文件添加到附加依赖项中。两种方法选一种即可在需要用到的动态库函数用关键字extern声明。原创 2022-11-29 21:30:29 · 5013 阅读 · 0 评论 -
进程的通信 - WM_COPYDATA
在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。其中使用向另一进程发送消息是一种比较经济实惠的方法。通信需要将传递的消息封装在结构体中,在消息传递函数时作为lParam参数传递为自定义数据,按照自己习惯设置就好,不影响对象的传输;表示传递数据的大小(以字节为单位表示传递的数据,是一个void*类型使用时要用而不能使用PostMessage,因为SendMessage是的,会等待消息响应窗体处理消息完毕后再返回;原创 2022-11-21 22:53:03 · 3709 阅读 · 0 评论 -
进程的通信 - 命名管道
命名管道(Named Pipes),顾名思义,一个有名字的管道。命名管道的名字主要是用于确保多个进程访问同一个对象。命名管道不仅可以在同一台计算机之间传输数据,甚至能在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。原创 2022-11-20 22:27:24 · 1718 阅读 · 1 评论 -
进程的通信 - 无(匿)名管道
匿名管道是一个没有名称的管道,本质上是一块共享的内存区域。匿名管道可以实现在。这里需要注意两点,第一就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之间的通信,第二就是实现的是父进程和子进程之间的通信,而不是任意的两个进程。匿名管道正是因为提供的功能很单一,所以他所需要的系统开销也就比命名管道小很多。然后顺便介绍一个匿名管道的另一种功能,其通过匿名管道可以实现子进程输出重定向。原创 2022-11-18 22:25:55 · 256 阅读 · 2 评论 -
进程的通信 - 邮槽
邮槽是Windows系统提供的一种单向进程间的通信机制。对于相对简短的地坪率信息发送,使用邮槽通常比命名管道或者Unix域套接字更简单使用邮槽通信的进程分为服务端和客户端。邮槽,在创建时需要指定邮槽名,创建后邮槽。在邮槽创建后,客户端可以通过邮槽名打开邮槽,在获得句柄后可以向邮槽写入消息。,只有服务端才能从邮槽中读取消息,客户端只能写入消息。消息先入先出。客户端先写入的消息在服务端先被读取。通过邮槽通信的数据可以是任意格式的,但是一条消息。邮槽除了在本机内进行进程间的通信外,在主机间也可以通信。原创 2022-11-17 21:04:56 · 737 阅读 · 0 评论 -
进程的通信 - 剪切板
因为剪贴板是所有进程都可以访问的,所以应用程序在使用这个剪贴板时,有可能已经有其他的应用程序把数据放置到了剪贴板上,因此该进程打开剪贴板之后,就需要调用 EmptyClipboard 函数来清空剪贴板,释放剪贴板中存放的数据的句柄,并将剪贴板的所有权分配给当前的进程,这样做之后当前打开这个剪贴板的程序就拥有了剪贴板的所有权,因此这个程序就可以往剪贴板上放置数据了。这个函数将清空剪贴板,并释放剪贴板中数据的句柄,然后将剪贴板的所有权分配给当前打开剪贴板的窗口。每个内存对象的内部数据结构包括最初为零的锁计数。原创 2022-11-16 23:04:12 · 766 阅读 · 0 评论 -
深入理解内核对象与函数句柄
Windows进程中除了内核对象还有其他类型的对象,比如窗口,菜单,字体等,这些属于用户对象和GDI对象。要区分内核对象与非内核对象,最简单的方式就是查看创建这个对象的函数,几乎所有创建内核对象的函数都有一个允许我们指定。内核对象A,B的引用计数减为0,被操作系统内核销毁,而进程1只减少自身对C,D的引用计数,不会影响进程2对C,D的引用计数,此时C,D引用计数不为0,不会被销毁。初次创建内核对象,使用计数为1。也就是说内核对象在当前进程中创建,但是当前进程退出时,内核对象有可能被另外一个进程访问。原创 2022-11-10 20:55:49 · 231 阅读 · 0 评论 -
线程同步的四种实现方式
这两种事件对象的区别在于当人工重置的事件对象得到通知时,等待该事件对象的所有线程均变为可调度线程;而当一个自动重置的事件对象得到通知时,等待该事件对象的线程中只有一个线程变为可调度线程。因为我们使用了事件对象。函数,以获得指定的临界区对象的所有权,该函数等待指定的临界区对象的所有权,如果该所有权赋予了调用线程,则该函数就返回;之后,其他想要获得该临界区对象所有权的线程就可以获得该所有权,从而进入关键代码段,访问保护的资源。函数释放该对象,该函数将释放一个没有被任何线程所拥有的临界区对象的所有资源。原创 2022-11-10 20:50:32 · 1405 阅读 · 0 评论 -
线程同步之信号量
信号量的组成信号量()是操作系统用来解决并发中的互斥和同步问题的一种方法。与互斥量不同的地方是,它允许多个线程在,但是需要限制在同一时刻访问此资源的最大线程数目。信号量的工作原理以一个停车场为例,假设停车场只有三个车位,那么同一时刻最多只能有三辆车进入,还有其他车来时则必须在入口等待。只有当有一辆车离开停车场,才能允许其他车辆进入,如此往复。这个停车系统中,每辆车就好比一个线程,空车位数量就好比一个信号量,空车位数量限制了可以活动的线程。原创 2022-11-10 20:51:46 · 871 阅读 · 0 评论 -
多线程+socket 实现群聊服务器
通过多线程+Socket,实现群聊服务器。服务端:每当有一个连接时,服务端起一个线程去维护;.将收到的信息转发给所有的客户端;当某个客户端断开连接时需要处理断开连接客户端:接收与发送信息断开连接自定义用户名原创 2022-11-06 20:25:07 · 2335 阅读 · 2 评论 -
UDP套接字编程详解
UDP 是) 参考模型中一种无连接的协议。UDP协议与协议一样用于处理数据包。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无。UDP用来支持那些需要在之间传输数据的网络应用。包括系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。,UDP是最好的选择。原创 2022-11-05 20:22:30 · 1942 阅读 · 1 评论 -
TCP套接字编程详解
为什么要称socket为套接字?首先套接字的原词为"socket",直译过来就是插座的意思,最先采用这个词的人,觉得网络连接,就像插口和插座一样,一方插,一方被插(知乎用户回答) 除此之外,linux等系统中“套接字”对应“socket word”,所以“字”也就是对应“word”,可能指计算机数据,也可能指存储socket的数据表示,因为端口号是两个字节,就是一个WORD。 至于为什么翻译为“套接字”:有人说是“套用-接口-标识”的意思;有人说是“套接起来的字符串”的意思;有人说“是将网络数据包一层一层原创 2022-10-29 18:32:32 · 7327 阅读 · 3 评论 -
(C++)线程同步——互斥对象
临界资源是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。原创 2022-09-13 09:08:38 · 857 阅读 · 0 评论 -
(C/C++)线程基本概念、如何创建多线程
线程是在进程中产生的一个执行单元,是CPU调度和分配的最小单元,其在同一个进程中与其他线程并行运行,他们可以共享进程内的资源,比如内存、地址空间、打开的文件等等。是CPU调度和分派的基本单位,是分配资源的基本单位进程:正在运行的程序是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。原创 2022-09-12 10:32:38 · 2990 阅读 · 0 评论 -
QT驾校科目考试系统——从实现到发布
Qt 是一个跨平台的 C++ 框架(C++库),目前最新的版本是 Qt5。Qt5 还包含了很多小版本,其中推荐 Qt5.6 或 Qt5.9,这两个版本是 LTS 版本(即长期支持版本),Bug较少,相对稳定。Qt 除了支持界面设计(GUI编程),还封装了与网络编程、多线程、数据库连接、视频音频等相关的功能。这套 Qt 教程以 Qt 5.9 为基础来介绍 Qt 开发,配有精美的图片以及完整的示例程序,几乎涉及 Qt 编程的所有模块。...原创 2022-07-20 21:00:26 · 1439 阅读 · 3 评论 -
聊天软件项目开发1
InstantMessaging(即时通讯,实时传讯)的缩写是IM,这是一种可以让使用者在网络上建立某种私人聊天室的实时通讯服务。TCP是美国国防部设计的两种传输协议之一,另一种是UDP。UDP是一种不可靠的网络服务,负载比较小,而TCP则是一种可靠的通信服务,负载相对而言比较大。TCP采用套接字(socket)或者端口(port)来建立通信。TCP给端口到端口通信提供了错误和流量控制机制,同时TCP还负责建立连接、处理终止和中断的端对端通信控制。通常情况下我们认为TCP相比UDP具有更大的通信负载,UDP原创 2022-07-15 08:36:38 · 454 阅读 · 0 评论 -
MFC控件学习:图片(bmp/png)
图片控件简介:图片控件和前面讲到的静态文本框都是静态文本控件,因此两者的使用方法有很多相同之处,所属类都是CStatic类,有关成员函数已在前面介绍,这里就不重复了。原创 2022-07-09 10:49:09 · 3538 阅读 · 2 评论 -
MFC控件学习:按钮
按钮,这应该是用的最多,也是见得最多的一种控件。各大App,不管有名无名,按钮基本上都是不可或缺的控件之一。比如:王者荣耀登陆界面的“进入游戏”就是一个按钮,只是给他整的花里胡哨了而已。...原创 2022-07-08 18:06:22 · 3479 阅读 · 1 评论 -
C语言实现推箱子 (数据库连接+项目打包发布)
小时候都玩过推箱子这个经典的小游戏,它伴随着我们的童年,带给我们了许多的乐趣。今天呢小编为大家分享一下使用C语言来完成推箱子游戏。以及如何将游戏与数据库连接和项目的打包发布。原创 2022-02-22 23:27:49 · 11930 阅读 · 12 评论 -
VS 17、19、22程序打包Installer Projects
VS 2017 -2022都可实用的程序打包,让你的项目成果可以直接发给朋友( •̀ ω •́ )y原创 2022-02-20 16:44:39 · 3918 阅读 · 8 评论 -
C语言实现俄罗斯方块
使用C语言完成俄罗斯方块。《俄罗斯方块》的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。顾名思义,俄罗斯方块自然是俄罗斯人发明的。原创 2022-02-13 16:36:49 · 68139 阅读 · 121 评论 -
使用MFC绘制一些简单图形
一、画一个直线画直线需要起点和终点,当鼠标按下记录起点位置,鼠标弹起时记录终点位置,通过两点即可画出一条直线首先在类向导增加鼠标左键按下事件,和鼠标左键弹起事件再通过类向导添加一个CPoint类型的成员变量用来记录鼠标左键按时的位置补充事件代码void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point){ m_pOrigin = point; CView::OnLButtonDown(nFla原创 2022-02-12 22:57:15 · 12766 阅读 · 4 评论 -
AL游戏中的自动寻路——A*算法详解(C++实现)
一、A*算法的一个应用实例:迷宫寻路【下面是A*算法的一个应用实例:迷宫寻路。在日趋流行的3D游戏中,如何使非玩家控制角色准确实现自动寻路功能成为3D 开发技术中一大研究热点。其中A*算法得到大量运用。A*算法与传统路径规划算法相比,实时性更高、灵活性更强、寻路结果更贴近人工选择路径结果。A*寻路算法并不是找到最优路径,只是找到相对近的路径,因为赵最优路径要把所有可行路径都找出来进行对比,消耗性能太大,寻路效果只要想读路径就行了。原创 2022-02-07 20:03:54 · 8131 阅读 · 8 评论 -
C/C++访问MySQL数据库,配置VS编译器
第一步:打开mysql的安装目录,默认安装目录如下:C:\Program Files\MySQL\MySQL Server 8.0,确认 lib 目录和include 目录是否存在。第二步:打开VS2019,新建一个空工程,控制台应用程序即可,注意:解决方案平台选择 X64第三步:打开项目属性页,打开VC++目录,在包含目录中,将mysql安装文件中的include文件的路径添加到这里第四步:打开VC++目录,在库目录中将mysql文件中的lib文件路径添加进来第五步:...原创 2022-02-02 21:46:50 · 1430 阅读 · 0 评论