- 博客(48)
- 收藏
- 关注
原创 Qt实现简易CAD软件的开发:技术解析与实现
该简易CAD软件项目使用了Qt框架,这是一个跨平台的C++图形用户界面库。main.cpp:程序入口。和:主窗口的实现和定义。:UI布局文件。和:自定义绘图视图的实现和定义。res.qrc:资源文件。Q_OBJECTpublic:private:自定义绘图视图类继承自,负责处理用户的绘图操作,如鼠标点击、移动和释放等事件。以下是该类的定义和实现。
2024-07-22 16:52:56 2468 4
原创 Qt坐标变换详解
Qt提供了丰富的坐标变换功能,包括平移、旋转、剪切和缩放等,使得图形编程更加灵活和强大。通过save()和restore()方法,可以方便地管理和切换不同的变换状态。掌握这些坐标变换方法,将极大地提升我们在Qt中进行图形绘制的能力。
2024-07-07 23:14:48 898
原创 Qt 绘图详解
通过以上这些代码示例和详细解释,相信你已经掌握了在Qt中进行各种图形绘制的方法。Qt的绘图功能非常强大,能够满足各种复杂的绘图需求。首先,我们在每个图形的绘制过程中启用反锯齿功能,以保证绘制效果的平滑。多点连接的线的顶点。
2024-07-06 23:23:41 713
原创 使用 Qt 实现自定义拖动窗口
让我们从创建一个基本的 Qt 应用程序开始,并定义一个类。下面是一个基于QWidgetQ_OBJECTpublic:// 设置无标题栏窗口// 设置窗口大小protected:if (event->button() == Qt::LeftButton) { // 检查是否按下了鼠标左键// 设置拖动状态为真,表示开始拖动// 记录鼠标按下时的全局位置与窗口左上角位置的差值// 接受事件,防止事件进一步传播// 调用基类的 mousePressEvent 以确保默认行为被执行。
2024-07-05 22:51:41 922
原创 使用Qt实现文本文件的读写操作
在现代应用程序开发中,文件操作是一个不可或缺的任务。无论是读取配置文件、处理用户输入,还是保存日志信息,文件的读取和写入操作都非常重要。Qt框架作为一个强大且灵活的跨平台C++框架,为文件操作提供了丰富的类和方法。在本文中,我们将探讨如何使用Qt进行文本文件的读取和写入操作,特别是使用QFileDialog类来打开和保存文件。我们将展示如何通过一个简单的图形用户界面(GUI),利用QFile、QTextStream和QFileDialog类来高效地进行文件操作。
2024-06-04 21:41:33 2020
原创 VS2022连接MYSQL数据库乱码解决方案以及注意事项
### 为什么能够使用不同的编码?1. **自动编码转换**:MySQL 服务器会根据客户端设置的字符集自动转换数据。当数据从数据库发送到客户端时(查询操作),如果客户端使用的字符集(如 GBK)与存储数据的字符集(如 UTF-8)不同,MySQL 会将数据从存储的字符集转换为客户端设置的字符集。同样,当数据从客户端发送到服务器时(如插入或更新操作),MySQL 也会进行适当的转换。2. **设置客户端字符集**:在连接数据库时,客户端(VS 或其他应用程序)可以指定要使用的字符集。如果你在连接字符串
2024-03-05 08:53:43 761
原创 红黑树的原理
定义 — 是每个节点都带有颜色属性(颜色为红色或黑色)的自平衡二叉查找树,满足下列性质:1)节点是红色或黑色;2)根节点是黑色;3)所有叶子节点都是黑色节点(NULL);4)每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。5)从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
2023-09-17 22:02:38 562
原创 哈夫曼编码原理及实现
构建编码树的方法是将频率最低的两个符号合并为一个新节点,该节点的频率为两个节点频率之和。哈夫曼编码(Huffman Coding)是一种用于数据压缩的编码方法,它通过给出不同的数据符号分配不同长度的编码,使得出现频率高的符号具有较短的编码,而出现频率低的符号具有较长的编码,从而达到压缩数据的目的。然而,对于哈夫曼编码的最佳性能,符号的频率应该是根据数据集的统计特征进行调整的。由于频率高的符号具有较短的编码,而频率低的符号具有较长的编码,所以整个编码后的数据长度会相对减小。
2023-09-17 21:52:20 3666
原创 二叉树的具体原理及实现
如果要插入的键值小于当前节点的键值,并且当前节点没有左子节点,则将新节点作为当前节点的左子节点;如果要插入的键值大于当前节点的键值,并且当前节点没有右子节点,则将新节点作为当前节点的右子节点。首先,找到要删除的节点。如果要删除的节点有两个子节点,可以找到其右子树中的最小节点(或者左子树中的最大节点)来替换它。将要删除的节点的值,与节点 root 节点进行比较,若小于则去到左子树进行比较,若大于则去到右子树进行比较,重复以。4.删除节点存在左右子节点,则取左子树上的最大节点或右子树上的最小节点替换删除节点。
2023-09-17 21:39:20 899
原创 C++友元函数和友元类
在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。友元可以分为两种类型:类友元和函数友元。友元的使用场景包括但不限于以下情况:当两个或多个类需要共享私有数据时,可以使用类友元来实现数据的直接访问,而无需通过公有接口。当某个类需要提供特定函数或操作给其他类使用,但这些函数需要访问类的私有成员时,可以使用函数友元。
2023-08-18 13:53:07 127
原创 顺序表的实现
结构体定义 # define MAX_SIZE 100 struct _SqList {// 顺序表的基地址 int length;// 顺序表的长度 int size;// 顺序表总的空间大小 }100结构体定义 # define MAX_SIZE 100 struct _SqList {// 顺序表的基地址 int length;// 顺序表的长度 int size;// 顺序表总的空间大小 }
2023-01-01 11:14:33 307 1
原创 C++,STL,set,multiset容器
set和multiset是一个集合容器,其中set所包含的元素是唯一的,集合中的元素按一定的顺序排列。set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作上比vector快。在n个数中查找目标数的效率是 log2 n红黑树定义 — 是每个节点都带有颜色属性(颜色为红色或黑色)的自平衡二叉查找树,满足下列性质:1)节点是红色或黑色;2)根节点是黑色;3)所有叶子节点都是黑色节点(NULL);4)每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续
2022-12-05 21:45:02 406
原创 C++,STL,List容器
/反转链表,比如list包含1, 2, 3, 4, 5五个元素,运行此方法后,list就包含5, 4, 3, 2, 1元素。//在pos位置插入[beg,end)区间的数据,无返回值。//在pos位置插入一个elem元素的拷贝,返回新数据的位置。//将[beg, end)区间中的数据拷贝赋值给本身。//删除[beg,end)区间的数据,返回下一个数据的位置。//将[beg, end)区间中的元素拷贝给本身。//删除pos位置的数据,返回下一个数据的位置。
2022-11-22 22:08:57 250
原创 C++,STL,deque容器
deque是“double-ended queue”的缩写,和vector一样都是STL的容器,唯一不同的 是: deque是双端数组,而vector是单端的。//将[beg, end)区间中的数据拷贝赋值给本身。//在pos位置插入一个elem元素的拷贝,返回新数据 的位置。//在pos位置插入[beg,end)区间的数据,无返回值。//构造函数将[beg, end)区间中的元素拷贝给本身。//删除[beg,end)区间的数据,返回下一个数据的位置。//存放float的deque容器。
2022-11-19 11:13:14 121
原创 C++,STL,vector容器
vector相当于顺序表vector是将元素置于一个动态数组中加以管理的容器。vector可以随机存取元素,支持索引值直接存取, 用[]操作符或at()方法对元素进行操作vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时,这是因为在中部或者头部插入数据,所以数据都会移动,会大量拷贝。
2022-11-18 09:46:22 887
原创 顺序栈的各种操作
注意:顺序栈只能在一端操作,后进先出,这是栈的关键特征,也就是说不允许在中间查找,取值,插入,删除,等,操作,掌握好顺序栈的,初始化,入栈,出栈,去栈顶元素等操作即可。2.进出的一端为栈顶(top),另一端为栈底(base),栈可以用顺序存储,也可以用链式存储。1.栈是一种线性表,只不过它是操作,受限的线性表,只能在一端操作。其中,base指向栈地,top指向栈顶。
2022-10-04 19:28:35 346
原创 Linux 内核“共享”双向链表(高逼格代码)
/一. web 服务器超时的链表结构 typedef struct {int fd;// 使用超时时刻的时间戳表示 } ConnTimeout;} //二.璀璨星空的链表结构 typedef struct {int x;//星星的 x 坐标 int y;//星星的 y 坐标 enum STATUS stat;//状态 unsigned radius;//星星的半径 int step;//每次跳跃的间隔 int color;//星星的颜色 } STAR;}...
2022-08-08 18:42:30 196
原创 C++类型转换
旧式转型 C风格的强制类型:TYPE b = (TYPE) a例如:int i = 48;char c = (char) i;新式转型C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。格式:TYPE b = 类型操作符 ( a )类型操作符= static_cast | reinterpreter_cast | dynamic_cast | const_cast静态类型转换(斯文的劝导,温柔的转换)。如int转换成char主要用法:1.用于类层次结构中基类(父类)和派生类
2022-07-13 22:57:41 337
原创 函数模板_类模板
项目需求: 实现多个函数用来返回两个数的最大值,要求能支持char类型、int类型、double类型变量实际上,以上程序,只需要一个“函数”就可以搞定!函数模板语法所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。由以下三部分组成: 模板说明 + 函数定义 +
2022-06-24 20:00:58 1100
原创 C++核心_编程_多态
1.为了避免程序的二义性2.当统一使用父类指针处理的时候,父类指针指向子类的时候,去调用子类里面的方法,实际上调用的是父类的方法运行结果这里就是使用父类指针做统一处理,使用了父类指针指向了子类对象,但是调用的实际上还是父类的函数在父类的成员函数前面加上virtual,使用虚函数来处理,子类可加可不加多态的本质:形式上,使用统一的父类指针做一般性处理,但是实际执行时,这个指针可能指向子类对象,形式上,原本调用父类的方法,但是实际上会调用子类的同名方法。【注意】程序执行时,父类指针指向父类对象,或
2022-06-09 15:00:40 109
原创 C++错误总结
string x;//品种 float y;//重量 float j;//长度 };"草鱼" };return 0;}这是报错的源代码,编译器没有任何报错,但是一编译就出问题,我看了半天才发现原来是struct中的string 前面没有加std::以为我在mani函数前加了using namespace std;但是我定义struct的时候定义在了using namespace std;前面,所以导致了“未知重写说明符”...
2022-04-18 20:44:34 5397
原创 C/C++操作硬件位运算
什么是位?内存的基本单元是字节, 一个字节有 8 位.有那些操作符1.位与 & 0 & 0 0 0 & 1 0 1 & 0 0 1 & 1 1 cout << " 8 & 3 = " << (8 & 3) << endl;// & 00110011// 01010101-----------------得到 00010001ps:对应位, 都是 1, 结果才
2022-03-08 23:38:41 1032
原创 C/C++ cout,printf输出控制精度
C++控制精度输出的方法:1.首先需要添加一个#include <iomanip>头文件2.cout << setiosflags(ios::fixed) << setprecision(2) << y;3setprecision(2),这个2代表的是保留小数点的位数C控制精度的方法1.printf("%.2f", y);这里面的%.2f代表的是保留两位小数....
2022-03-03 19:43:53 1081
原创 C++自定义函数返回值
#include <iostream>#include <string>#include <Windows.h>using namespace std;double light_year(double w ) { w = w * 63240; return w;}int main(void) { double g=0; double t=0; cout << "请输入光年:"; cin >> g; light_year
2020-10-31 17:05:11 1062 1
原创 C++ I/O文件读写操作
IO: 向设备输入数据和输出数据C++的IO流c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出)文件流: 对文件进行读写操作头文件: 类库:ifstream 对文件输入(读文件)ofstream 对文件输出(写文件)fstream 对文件输入或输出//写文件#include <fstream>#include <iostream>#include <string>using namespace std;
2020-05-22 08:58:50 4059 11
原创 C++面向对象派生继承-笔记
代码:Father.hSon.hFather.cppSon.cppmain.cpp子类, 一般会添加自己的数据成员/成员函数,或者, 重新定义从父类继承的方法!!! 子类对象就会调用自己重新定义的方法, 不会调用父类的同名方法为什么要使用protected访问权限?子类的成员函数中,不能直接访问父类的private成员,已经这些成员已经被继承下来了,但是却不能访问。只有通过父类的public函数来间接访问,不是很方便。比如,刚才Demo中Father类中的name和age成员。解决方
2020-04-19 18:59:13 623
原创 C++面向对象-类的基本使用方法
什么是面向过程?根据程序的执行过程,来设计软件的所有细节。面向过程的缺点:开发大型项目时,越来越难以把控,甚至失去控制。后期维护、更新成本很大。解决方案:使用面向对象。面向过程是C语言的东西,C++是面向对象什么是面向对象?面向对象是一种开发思想,一种全新的开发方式。面向对象思想的重要性:开发大型项目必备,是高级程序员的必备技能!“人类”是一个抽象的概念,不是具体的某个人。“类”,是看不见,摸不着的,是一个纯粹的概念.“类”,是一种特殊的“数据类型”,不是一个具体的数据。注意:类, 和基本
2020-04-04 12:45:02 2735
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人