C++
文章平均质量分 65
进击的汪sir
Talk is cheap. Show me the code.
展开
-
C++内存管理机制
1. C++内存管理机制在C++中内存分为5个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区**堆(heap):**分配方式类似于链表;一般由程序员分配和释放,若程序员不释放,OS可能回收。分配方法:malloc、new ;释放方法:free delete**栈(heap):**编译器自动分配释放,存放函数参数值、局部变量的值。操作方式类似于:数据结构的栈。 进程的每个线程都有私有的栈使用 new 和 delete时, 内存在堆中分配。堆内存空间必须通过 delete 完全原创 2021-07-15 14:28:55 · 440 阅读 · 0 评论 -
C++11运算符重载详解与向量类重载实例(<<,>>,+,-,*等)
1. C++运算符重载介绍C ++ 中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C ++ 中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C ++ 的可扩展性,也是C ++ 最吸引人的特性之一。运算符重载时要遵循以下规则:( 1 ) 除了类属关系运算符 " . " 、成员指针运算符 " .* " 、作用域运算符 " :: " 、sizeof运算符和三目运原创 2021-07-15 10:38:24 · 1365 阅读 · 0 评论 -
记录 错误 C7510 “iterator”: 类型 从属名称的使用必须以“typename”为前缀 KMatrix_vector
1. 问题 “iterator”: 类型 从属名称的使用必须以“typename”为前缀今天将我VS2017 的代码移植到VS2019上面时,产生了上面的错误,产生错误的代码片段如下 vector<vector<T>>::iterator it = r.begin() + row; r.erase(it); rowCount--;2. 解决办法在vector前面加上 typename 解决问题,编译通过,还有其他人说改vs版本啥的方法,大家可以自己去百度一下,我原创 2021-07-14 11:43:49 · 560 阅读 · 0 评论 -
C++智能指针之shared_ptr与右值引用(详细)
1. 介绍在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。C++11 中提供了三种智能指针,使用这些智能指针时需要引用头文件 :std::sh原创 2021-07-12 19:52:11 · 795 阅读 · 0 评论 -
Qt5项目实现功能丰富的文本编辑器Plus(实现部分wps功能)
1. 前言这次花了大约4天的时间,去做了这个文本编辑器Plus,这个编辑器主要是为了让我去熟悉一些常用的操作,以及信号槽的使用,我上次做的简易版文本编辑器地址:Qt5实现文本编辑器2. 主界面展示界面演示了部分功能3. 功能介绍3.1 文件操作功能新建文件打开文件打印文件打印图片3.2 图像坐标变换放大功能缩小功能旋转功能(90°,180°,270°)纵向镜像水平镜像3.3 文本编辑功能设置字体设置字号设置文字加粗设置文字斜体设置文字下划线设置文字颜色原创 2021-07-12 17:07:11 · 724 阅读 · 0 评论 -
LeetCode解题记录(贪心算法)(一)
1. 前言目前得到一本不错的算法书籍,页数不多,挺符合我的需要,于是正好借这个机会来好好的系统的刷一下算法题,一来呢,是可以给部分同学提供解题思路,和一些自己的思考,二来呢,我也可以在需要复习的时候,通过博客来回顾自己,废话不多说,开始!目前的规划2. 算法解释顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。举一个最简单的例子:小明和小王喜欢吃苹果,小明可以吃五个,小王可以吃三个。已知苹果园里有吃不完的苹果,求小明和小王一共最多吃多少个苹原创 2021-07-08 09:35:44 · 214 阅读 · 0 评论 -
Qt5实现文本编辑器(附图片转PDF与详细代码)
1. 功能介绍老规矩,我们直接上截图这是主界面文件菜单界面编辑菜单界面设置菜单界面关于菜单界面2. 功能演示设置字体颜色设置字体大小点击关于菜单点击关于Qt菜单会自动跳转到Qt的官网点击图片转PDF打开文件等对话框3. 代码我们直接上代码aboutwidget.h#ifndef ABOUTWIDGET_H#define ABOUTWIDGET_H#include <QWidget>namespace Ui {class A原创 2021-07-04 16:31:11 · 755 阅读 · 1 评论 -
VS写Qt项目时,ui界面拖拽的控件代码找不到引用的解决办法
最近准备尝试用VS去开发Qt项目,但是我在ui文件中修改的控件,在vs里面找不到,于是上网浏览解决办法,总结如下1. 保存Ui文件在拖拽控件之后,Ctrl+S2. 重新编译ui文件3. 右键项目,重新扫描解决方案这样就可以啦,话说真的好麻烦啊,各位大佬们有没有其他更好的解决办法?在评论区说一下?...原创 2021-07-03 22:04:39 · 1852 阅读 · 2 评论 -
2021Qt打包发布教程
因为最近写了一个程序,然后想着能给室友玩耍,就研究了一下如何打包,写这篇博客记录一下1. 首先获得程序的Release版本就是点击这个Release,然后构建一遍2. 进入构建的release文件夹找到对应的exe文件3. 将这个文件放入单独的文件夹然后进入windows的控制台win+r打开,然后输入cmd然后进入你放exe文件的目录执行命令 windeployqt.exe 你的文件名.exe然后它会将你需要的依赖包导入进来,这样双击exe就可以运行了打包成压缩文件,发给你的.原创 2021-06-25 23:45:41 · 510 阅读 · 0 评论 -
Qt实现基于多线程的文件传输(服务端,客户端)
1. 效果先看看效果图这是传输文件完成的界面客户端服务端2. 知识准备其实文件传输和聊天室十分相似,只不过一个传输的是文字,一个传输的是文件,而这方面的知识,我已经在前面的博客写过了,不了解的同学可以去看一下C++网络编程Qt实现网络聊天室(客户端,服务端)还有多线程相关的知识Qt中的多线程与线程池浅析+实例2.1 关于多线程这次是用多线程实现的文件传输系统,其中对客户端来说,子线程负责连接服务器,发送文件,主线程负责修改进度条,对服务端来说,也是用子线程来处理客户原创 2021-06-24 12:00:56 · 3306 阅读 · 10 评论 -
error: type ‘QObject‘ is not a direct or virtual base of ‘SendFile‘
今天遇到了一个错误详细信息如下sendfile.cpp:3:39: error: type ‘QObject’ is not a direct or virtual base of ‘SendFile’在QtCreator中报错很迷惑,为啥不能这样写SendFile是我自己定义的一个类问题解决方法:加上继承QObject类...原创 2021-06-23 16:28:08 · 3970 阅读 · 0 评论 -
Qt实现网络聊天室(客户端,服务端)
1. 效果演示客户端服务器连接成功之后2. 预备知识如果不知道网络编程的可以去看我的上一篇文章C++网络编程在Qt中,实现网络编程的方式比用C++或C实现要方便简单许多,因为Qt已经替我们封装好了,我们会使用就可以了,然后大家还需要了解Qt 的信号槽机制,可以参考我这篇文章,Qt信号槽2.1 QTcpServerQTcpServer 类用于监听客户端连接以及和客户端建立连接,在使用之前先介绍一下这个类提供的一些常用 API 函数:构造函数QTcpServer::QTcpS原创 2021-06-23 10:04:44 · 6442 阅读 · 5 评论 -
C++网络编程
昨天学习了一些C++网络编程的一些相关知识,今天回忆复习一下1. 相关知识1.1 局域网和广域网局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。IP(Internet Protocol):本质是一个整形数,用于表示计算机在网络中的地址。IP 协议版本有两个:IPv4 和 IPv6IPv4(Internet Protocol version4):-使用一个 3.原创 2021-06-20 16:28:27 · 201 阅读 · 0 评论 -
Qt中的多线程与线程池浅析+实例
1. Qt中的多线程与线程池今天学习了Qt中的多线程和线程池,特写这篇博客来记录一下2. 多线程2.1 线程类 QThreadQt 中提供了一个线程类,通过这个类就可以创建子线程了,Qt 中一共提供了两种创建子线程的方式,先看一下这个类中提供的一些常用 API 函数:2.1.1 常用函数// QThread 类常用 API// 构造函数QThread::QThread(QObject *parent = Q_NULLPTR);// 判断线程中的任务是不是处理完毕了bool QThread原创 2021-06-19 13:17:35 · 2462 阅读 · 0 评论 -
Qt中容器类型控件介绍
1. Qt中容器类型控件介绍本篇博客为本人学习所写,后续会继续补充1.1 QWidget关于QWidget在前边的章节中已经介绍过了, 这个类是所有窗口类的父类, 可以作为独立窗口使用, 也可以内嵌到其它窗口中使用。Qt中的所有控件都属于窗口类, 因此这个类也是所有控件类的基类。如果一个QWidget类型的窗口中还有子窗口, 为了让子窗口有序排列, 需要给当前QWidget进行布局操作。1.2 QFrameQFrame就是一个升级版的QWidget, 它继承了QWidget的属性, 并且原创 2021-06-16 16:58:06 · 688 阅读 · 0 评论 -
Qt5中按钮控件的用法浅析
1 QAbstractButtonQAbstractButton类是所有按钮的基类, 常用 的很多的api都是从这个基类继承的.1.1 常用公共成员和槽函数// 参数text的内容显示到按钮上void QAbstractButton::setText(const QString &text);// 得到按钮上显示的文本内容, 函数的返回就是QString QAbstractButton::text() const;// 得到按钮设置的图标QIcon icon() const;原创 2021-06-15 19:43:26 · 709 阅读 · 0 评论 -
Qt中的布局浅析与弹簧的使用,以及Qt居中的两种方法
1. 布局为什么要布局:布局之后窗口的排列是有序的布局之后窗口的大小发生变化, 控件的大小也会对应变化如果不对控件布局, 窗口显示出来之后有些控件的看不到的布局是可以嵌套使用常用的布局方式:水平布局 -> 所有的控件水平排列 -> 一行多列垂直布局 -> 所有控件垂直排列 -> 多行一列网格(栅格)布局 -> 多行多列在Qt中设置布局的两种方式使用Qt提供的布局使用QWidget进行布局 -> 推荐首先需要从工具栏中原创 2021-06-14 23:03:12 · 7764 阅读 · 0 评论 -
Qt中常用类QWidget,QMainWindow,QFileDialog,QInputDialog,QMessageBox,QFontDialog,QProgressDialog等类的用法
1. QWidgetQWidget类是所有窗口类的父类(控件类是也属于窗口类), 并且QWidget类的父类的QObject, 也就意味着所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收。这里给大家介绍一下关于这个类常用的一些API函数。// 构造函数QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 公共成员函数// 给当前窗口设置父对象void QW原创 2021-06-14 21:30:36 · 443 阅读 · 0 评论 -
C++中Lambda表达式浅析
1. Lambda表达式Lambda表达式是C++11最重要也是最常用的特性之一,是现代编程语言的一个特点,简洁,提高了代码的效率并且可以使程序更加灵活Lambda表达式就是一个匿名函数,所谓匿名函数,那自然是没有名字的函数,当一个函数只是临时使用而且比较简单的时候,就可以采用Lambda表达式Lambda表达式的语法格式如下:当你不需要capture捕获的时候,就直接写一个框框[]当你不需要参数的时候,就直接写一个括号()当年不需要返回值的时候,不用写箭头->和ret(返回值类型)原创 2021-06-13 22:26:32 · 432 阅读 · 3 评论 -
QT中自定义信号槽的使用浅析+实例
1. Qt中自定义信号槽的使用Qt框架提供的信号槽在某些特定场景下是无法满足我们的项目需求的,因此我们还设计自己需要的的信号和槽,使用connect()对自定义的信号槽进行连接。如果想要使用自定义的信号槽, 首先要编写新的类并且让其继承Qt的某些标准类,我们自己编写的类想要在Qt中使用使用信号槽机制, 那么必须要满足的如下条件:这个类必须从QObject类或者是其子类进行派生在定义类的头文件中加入 Q_OBJECT 宏1.1 自定义信号要求:1. 信号是类的成员函数2. 返回值是 v原创 2021-06-13 17:19:29 · 3699 阅读 · 0 评论 -
Qt项目ui文件中新添加的控件在代码中不识别的问题解决
今天在学Qt框架的信号槽,然后发现在ui中加的控件,通过ui-> 找不到,没有识别,于是上网查找了一下问题解决方法添加ui控件后,执行程序,退出程序,将debug目录下的ui_XXXX.h拷贝到程序目录下,重新打开就可以使用新添加的控件。如果不行不行就清理一遍重新构建。再不行就按住ctrl,鼠标点击存在的控件名进入ui头文件,然后退出一遍。我采用重新构建的方法,解决的了问题就是下面这个小锤子,编译器为Qt Creator...原创 2021-06-12 00:23:18 · 7590 阅读 · 0 评论 -
QT信号槽机制理解
1. 信号和槽概述> 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式(发布-订阅模式)。当某个`事件`发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触原创 2021-06-11 23:24:06 · 604 阅读 · 0 评论 -
C++ QT安装教程2021
第一步去官网下载https://download.qt.io/archive/qt/第二步next然后我是注册的账号注意密码的格式,要求至少7位,包含大小写字母和数字第三步点击下一步选择自己的安装目录记得下面的框一定要记得打上勾,意思是安装Qt Creator第四步MSVC2015 64-bit: Visual Studio 2015 使用的64位编译套件MSVC2017 32-bit: Visual Studio 2017 使用的32位编译套件MSVC2原创 2021-06-11 17:59:38 · 2730 阅读 · 0 评论 -
Qt Creater快速定义函数的快捷键
1.简介在Qt creator中编写函数的时候,在头文件编写了函数,需要在相应的cpp文件中编写对应的函数定义实现,如果每次都需要手动的敲击全部的代码,这会非常的耗时耗力,显得很方便,这时候就需要巧妙的利用好Qt creator这款IDE的快捷功能了2.小技巧现在我在mainwindow.h 中定义一个dataPlus函数,如图然后鼠标移动到函数的末尾,按下Alt+Enter,就会出现如下画面点击在mainwindow.cpp下添加定义...原创 2021-06-11 17:58:12 · 5958 阅读 · 1 评论 -
QT基本数据类型
因为Qt是一个C++框架, 因此C++中所有的语法和数据类型在Qt中都是被支持的, 但是Qt中也定义了一些属于自己的数据类型, 下边给大家介绍一下这些基础的数类型。QT基本数据类型定义在#include <QtGlobal> 中,QT基本数据类型有:类型名称注释备注qint8signed char有符号8位数据qint16signed short16位数据类型qint32signed short32位有符号数据类型qint64long l原创 2021-06-11 17:56:52 · 587 阅读 · 0 评论