C++
文章平均质量分 77
学习C++相关知识
烫青菜
如果世界漆黑,其实我很美
展开
-
Unity | unity&C++内存共享及中文乱码解决方式
unity&C++内存共享及unity测中文乱码解决方式原创 2022-11-15 11:15:35 · 1606 阅读 · 2 评论 -
C++ I 常用功能总结
获取windows端特殊文件夹路径;删除、查找文件夹等。原创 2022-03-01 11:16:03 · 1017 阅读 · 0 评论 -
C++ | 左值、右值、移动构造函数
目录一、左值、右值二、移动构造函数1.不使用移动构造函数2.使用移动构造函数三、通用引用四、std::move五、引用折叠一、左值、右值右值是C++从C继承来的概念,最初是指=号右边的值。但现在C++中的右值已经与它最初的概念完全不一样了。在C++中右值指的的临时值或常量,更准确的说法是保存在CPU寄存器中的值为右值,而保存在内存中的值为左值。 int a = 5;一个常数5,我们在使用它时不会在内存中为其分配一个空间,而...原创 2021-12-24 18:51:01 · 1753 阅读 · 0 评论 -
C++ | 内存管理
目录一、资源二、RAII机制1.举个栗子2.在栈上创建对象3.在堆上创建对象错误使用:改进:三、智能指针1.auto_ptr2.unique_ptr3.shared_ptr4.weak_ptr一、资源在计算机系统中,有很多种资源,资源是数量有限且对系统正常运行具有一定作用的元素。内存是我们最常⽤到的资源,此外还有⽂件描述符、socket、 互斥锁、文件句柄等。由于系统的资源是有限的,所以我们在编程使用系统资源时,都必须遵循...原创 2021-09-14 20:43:39 · 264 阅读 · 0 评论 -
C++ | Qt 文件系统
一、Qt 文件系统Qt 作为一个通用开发库,提供了跨平台的文件操作能力。QIODevice是所有 I/O 设备类的父类。二、读写文件Qt默认支持utf-8编码格式。1.通过文件对话框获取文件路径QFileDialog fileDialog(this);QString filePath= fileDialog.getOpenFileName(this,"选择文件","C://");2.读取文件并展示内容a.读取文件//读取文件方法一:readAll QF原创 2021-07-13 19:34:23 · 913 阅读 · 1 评论 -
C++ | 浅谈 Qt 事件
目录一、事件二、事件回调函数1.计时器事件 timerEvent相关方法【扩展】2.鼠标事件相关方法鼠标事件回调的重写三、事件的分发event()一、事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。一些事件在对用户操作做出响应时发出,如鼠标、键盘事件;另一些事件则是由系统自动发出,如计时器事件。 Qt 中所有事件类都继承于QEvent类。Qt 程序在main()函数创建一个QApplication对象,然后调用...原创 2021-06-24 18:38:49 · 1045 阅读 · 7 评论 -
C++ | 数字签名的生成与解析
一、准备工作下载makecert.exe及signcode.exe软件原创 2021-06-01 17:20:04 · 3888 阅读 · 0 评论 -
C++ | Qt自定义控件
1.新建原创 2021-05-28 11:25:45 · 317 阅读 · 0 评论 -
C++ | Qt 常用控件 Item Widgets
目录一、ListWidget二、TreeWidget三、TableWidget四、Stacked Widget五、Label控件1.展示图片2.展示gif一、ListWidget //设置QListWidget的显示模式 ui->listWidget->setViewMode(QListView::IconMode); //设置Grid大小 ui->listWidget->setGridSize(QSize(80,1原创 2021-05-27 19:47:27 · 718 阅读 · 0 评论 -
C++ | Qt QDialog自定义对话框及标准对话框
一、自定义对话框QDialog(及其子类,如QMessageDialog,以及所有Qt::Dialog类型的类)对于其 parent 指针都有额外的解释:如果 parent 为 NULL,则该对话框会作为一个顶层窗口;否则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置。对话框分为模态对话框和非模态对话框。 模态对话框:会阻塞同一应用程序中其它窗口的输入,操作其他窗口前需原创 2021-05-25 21:01:43 · 6242 阅读 · 1 评论 -
C++ | Qt QMainWindow类及资源文件的使用
一、QMainWindow类介绍通过QMainWindow类可以创建一个顶层窗口,该窗口可包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个铆接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget)。菜单栏等布局既可以用代码实现,也可直接操作UI界面直接设计。1.菜单栏QMenuBar一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。 //创建菜单栏,菜单栏只能有一个 Q原创 2021-05-25 18:44:50 · 466 阅读 · 0 评论 -
C++ | Qt 中文乱码总结【持续更新】
1.某些SDK传入路径时不支持中文路径,使用toLocal8Bit().data()QString res_path=QApplication::applicationDirPath()+"/中文/beauty_res";SDK::Init(res_path.toLocal8Bit().data());2.QT编辑器包含中文时编译报错,使用notepad++更改cpp文件编码格式为:UCS-2 Little Endian编码3.qDebug()输出中文时控制台区域乱码:在cpp文件第一行原创 2021-05-21 21:23:08 · 1410 阅读 · 0 评论 -
C++ | Qt Lambda表达式
一、格式[capture](parameters) mutable ->return-type{statement}[函数对象参数](操作符重载函数参数)mutable ->返回类型{函数体}1.函数对象参数[],标识一个Lambda的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。函数对象参数有以下形式:原创 2021-05-17 19:52:10 · 176 阅读 · 0 评论 -
C++ | 通过QPushButton学习Qt基本语法 [ 对象树、自定义信号和槽 ]
目录一、创建QPushButton1.方法一:2.方法二:按照按钮的大小创建窗口。3.方法三:继承QPushButton类,自定义MyQPushBtn类。扩展:对象树二、自定义信号和槽1.无参信号和槽a.信号b.槽c.信号和槽的关系2.关联无参信号和槽3.信号和槽的重载4.关联有重载的信号和槽5.信号和槽、信号和信号的断开一、创建QPushButton1.方法一:QPushButton *btn=new QPushButton;/...原创 2021-05-17 18:42:03 · 1709 阅读 · 2 评论 -
C++ | Qt编译DLL
Qt 中有两种编译方式:1、MSVC(Microsoft Visual C++ Compiler)是指微软的VC编译器2、MinGW(Minimalist GNU on Windows)是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,它是将GNU开发工具移植到Win32平台下的产物,即一套Windows上的GNU工具集,允许在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方运行时库。Qt使用两种方式编译dll时,有以下区别:原创 2021-02-25 15:44:35 · 960 阅读 · 0 评论 -
C++ | Qt 常用头文件及容器类
一、Qt常用头文件1.<QtGlobal> 头文件<QtGlobal> 头文件包含了 Qt 类库的一些全局定义,包括基本数据类型、函数和宏。一般的 Qt 类的头文件都会包含该文件,所以不用显式包含这个头文件也可以使用其中的定义。(1) Qt 中的数据类型定义Qt 数据类型 等效定义 字节数 备注 qint8 signed char 1 qint16 signed short 2 qint32 ..原创 2021-01-19 20:50:49 · 9890 阅读 · 2 评论 -
C++ | Qt快捷键
右键 快捷键 解释 等级 Context Help F1 为光标所在的符号显示帮助文件的内容 Follow Symbol Under Cursor F2 跟踪光标下的符号,若是变量,可跟踪到变量声明的地方;若是函数体或函数声明,可在两者之间切换 ★★★ Find Next F3 查找下一个 Switch Header/Source F4 在同名的头文件和源程序文件之间切换 ★★★ Start..原创 2020-12-30 17:04:56 · 1061 阅读 · 0 评论 -
C++ | Qt信号与槽机制
一、信号与槽概念信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一原创 2020-12-29 20:48:27 · 774 阅读 · 0 评论 -
C++ | 初识Qt
一、了解QtQt是一个跨平台的C++开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,也可以开发不带界面的命令行(Command User Interface,CUI)程序。Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。QT学习资料:http原创 2020-12-28 20:19:20 · 6176 阅读 · 0 评论 -
C++ | 开发过程中遇到的那些事【持续更新】
静态变量的初始化方式; new一个对象后,一定要记得释放,先delete,再nullptr; 封装的SDK,打包的release包需要在Debug模式下运行,要注意对外暴露的函数参数不能是std::string; 多线程问题:a.创建的各个对象要独立;b.在线接口需要多次调用,异步回调,此时为了或许结果,需要把每次调用创建的对象存放在map中,获取到结果再释放。...原创 2020-12-11 21:34:16 · 460 阅读 · 0 评论 -
C语言 | 关于命令行的一些操作
1.判断是否有按键输入,获取输入的字符但不在命令行显示#include <conio.h>char key = 'D';while (_kbhit()){ key = _getch();}2.更新命令行中某个位置的字符 #include <windows.h> COORD coord; //更新末尾空格 coord.X = last_x; coord.Y = last_y; SetConsoleCur原创 2020-11-23 21:08:10 · 523 阅读 · 0 评论 -
C++ | websocketpp ws转wss
因为之前请求的ws接口会有连接不上的情况,所以需要把ws改成wss。经过两天的研究,终于搞清楚了ws与wss的区别。一、概念wss是 Web Socket Secure 的简称,它是 WebSocket 的加密版本。我们知道 WebSocket 中的数据是不加密的,但是不加密的数据很容易被别有用心的人窃取,因此为了保护数据安全,人们将 WebSocket 与 SSL结合,实现了安全的 WebSocket 通信,即 WebSocketSecure 。所以说 WSS 是使用 SSL 进行加密了的 Web原创 2020-11-23 11:25:21 · 5474 阅读 · 9 评论 -
C语言 | 文件操作(二)
一、大文件的拷贝#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>#define SIZE 1024 //注意没有分号int main() { FILE* fp = fopen("./cn.wav", "rb"); if (!fp) { return -1; } FILE* fp1 = fopen("./copy.wav", "原创 2020-11-12 19:52:21 · 899 阅读 · 0 评论 -
C++ | 总结编译使用各个库出现的问题
1.编译boost库1.'cl'不是内部或外部命令,也不是可运行的程序或批处理文件 解决方法:找到cl.exe所在路径(例如我的路径:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64),配置环境变量。...原创 2020-11-12 15:55:40 · 317 阅读 · 0 评论 -
C++ | 解决x86版本 LNK1104 无法打开文件“libboost_random-vc140-mt-1_61.lib”等一系列问题
在编译C++ x86版本的SDK时,报了这个错:LNK1104 无法打开文件“libboost_random-vc140-mt-1_61.lib”,我编译了一圈x86 的boost库,发现貌似需要使用VS2015来编译,这样编译出来的boost库才是vc140,我用VS2017编译出来的都是vc141,那我需要安装VS2015呢?需要这么麻烦吗?并不需要!附一张VS2017编译的boost库:(我现在猜想改一下名字或许也可以用,但是没试过)解决办法:1.下载已经编译好的库boost_1_67原创 2020-11-12 14:47:20 · 987 阅读 · 0 评论 -
编译x86 release版本libcurl,支持https
最近需要封装一个支持x86的SDK,之前已经实现了编译x64 libcurl支持https,但是用同样的方法,编译出来的libcurl库还是不支持https,折腾了两天,尝试了网上所有的编译libcurl+openssl的方法,无果,直到遇到这篇文章。过程中遇到了点问题项目中使用静态库报错(这个问题还未搞清楚,路过的大神帮忙解答一下),所以最后用的是动态库,总结一下。本文记录的编译方式并不需要编译openssl,本人猜测是因为使用的curl源码中已经自带了。(希望有人可以帮忙给个正确答案)1.下载最原创 2020-11-11 19:58:09 · 610 阅读 · 0 评论 -
C++ | VS2017 C++项目配置使用的常见宏定义
常见宏定义 含义 $(ProjectDir) .vcxproj所在目录 $(Platform) x64/x86原创 2020-10-21 16:18:34 · 1503 阅读 · 0 评论 -
C++ | Curl+OpenSSL编译,支持https
一、安装ActivePerl下载路径:https://www.activestate.com/products/perl/downloads/ 安装教程:https://blog.csdn.net/MarsLee_U/article/details/86491759二、安装nasm(非必须)下载路径:https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 环境变量配置:https://blog.csdn.net/Bad_Monkey/articl原创 2020-10-10 20:36:32 · 1329 阅读 · 1 评论 -
C++ | 通过命令行运行exe时 参数中有空格的解决办法
当通过命令行运行exe,main函数需要设置参数时,我们需要在命令行中以如下的方式运行:>可执行文件名称 参数eg:demo.exe 中main函数需要一个string 参数:"hello",在命令行中需要这样写:>demo.exe hello或者>demo.exe "hello"eg:demo.exe 中main函数需要一个string 参数:" I am a chinese",在命令行中需要这样写:>demo.exe "I am a chine..原创 2020-09-18 20:36:39 · 1700 阅读 · 0 评论 -
CMake 编译jsoncpp
一、安装CMake进入链接,根据自身需要下载安装包进行下载,我下载的是cmake-3.18.2-win64-x64.msi; 双击进行安装,安装过程中注意勾选“Add CMake to the system PATH for all users”。安装完成后,在命令提示符中输入cmake,能够显示cmake的一些信息即为安装成功。二、下载jsoncpp源码并进行编译点击链接下载jsoncpp源代码,解压; 打开CMake软件,设置source code路径及build the binaries原创 2020-08-30 19:53:22 · 2304 阅读 · 1 评论 -
C++ | 生成静态库和动态库
一、静态库与动态库静态库(.lib):将.cpp文件中的函数的地址和定义,以及函数之间的链接关系通通打包,生成的一个二进制文件。 动态库(.lib+.dll):.lib文件打包的只是.cpp文件中函数的地址和链接关系,函数的具体定义打包在.dll文件中。 相同点: 二者都不包含函数的声明部分,因此调用这两种库的时候,都需要包含相应的头文件(.h); 静态库和动态库的.lib文件,在生成可执行文件(.exe)的时候,都将被打包进.exe文件中; 不同点: 静态库的.lib文件远大于动态库的.l原创 2020-08-24 21:24:35 · 984 阅读 · 1 评论 -
C++ | VS 配置静态、动态库
一、配置静态库(.lib文件、.h文件)将.h文件与.cpp文件放置同一目录下,这样我们在调用.h文件中声明的函数时,直接#include "xxx.h"即可 【链接器/常规/附加库目录】:.lib文件所在的文件夹 【链接器/输入/附加依赖项】:添加XXX.lib; 【C/C++/代码生成/运行库】:设置为"多线程(/MT)"二、配置动态库(.dll文件、.lib文件、.pdb文件、.h文件)将.h文件与.cpp文件放置同一目录下,这样我们在调用.h文件中声明的函数时,直接#include原创 2020-08-24 20:27:21 · 668 阅读 · 0 评论 -
C++ | C++入门总结(五)局部静态对象、使用引用避免拷贝、含有可变形参的函数、返回数组的指针、内联函数、函数指针
局部静态对象 某些时候,有必要令局部变量的生命周期贯穿函数调用及之后的时间。可以将局部变量定义成 static 类型从而获得这样的对象。局部静态对象( local static object )在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁,在此期间即使对象所在的函数结束执行也不会对它有影响。 如果局部静态变量没有显式的初始值 , 它将执行值初始化。内置类型的局部静态变量初始化为 0。int GetCount(){ static int count; retur..原创 2020-06-10 15:39:00 · 806 阅读 · 0 评论 -
VC | main函数参数
int main(int argc, char ** argv){ }argc 是 argument count的缩写,表示传入main函数的参数个数; argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc - 1个; main函数的参数可以在"项目"->"属性"->"配置属性"->"调试"->.原创 2020-06-08 16:15:09 · 921 阅读 · 0 评论 -
C++ | C++入门总结(四)运算符、空语句、switch内部变量
短路求值 逻辑与运算符(&&)和逻辑或运算符(||)都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。这种策略称为短路求值。 对于逻辑与运算符(&&)来说,当且仅当左侧运算对象为真时才对右侧运算对象求值。 对于逻辑或运算符(||)来说,当且仅当左侧运算对象为假时才对右侧运算对象求值。 关系运算符与赋值运算符 C++中bool值可以转化成为其他算数类型:false转化成0,tru..原创 2020-06-04 16:15:52 · 923 阅读 · 0 评论 -
C++ | C++入门总结(三)迭代器、数组
迭代器 所有标准库容器都可以使用迭代器,比如vector、string等。 使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素。 可以使用迭代器的这些类型中,都有begin和end成员,这两个成员可以返回迭代器:begin负责返回指向第一个元素(或第一个字符)的迭代器;end负责返回指向容器(或string对象)“尾元素的下一位置”的迭代器,也就是说,end返回的这个迭代器指向的是容器的一个本不存在的“尾后”元素,这样的迭代器没有什么实际含义,仅是一个标机而已,表示我们已经处理完..原创 2020-06-01 20:23:48 · 3084 阅读 · 0 评论 -
C++ | C++入门总结(二)string、vector
类关键字:class、struct。 类体右侧的表示结束的花括号后必须写一个分号,这是因为类体后面可以紧跟变量名以示对该类型对象的定义,所以分号必不可少。 一般来说,最好不要把对象的定义和类的定义放在一起。 类内初始值进行初始化时,不能使用圆括号。 没有成员函数的 struct 还是称作“结构”;有成员函数的 struct 就是类。 //推荐这样写 struct Person { std::string name;//默认值:空字符串 int age;//默认值:0 }; Per原创 2020-05-29 11:45:45 · 1054 阅读 · 0 评论 -
C++ | C++入门总结(一)引用&、指针*
C/C++特有的typedef:为一个已有的类型取一个新的名字。#include <iostream>using namespace std;int main(){ typedef int inter; inter a = 1; cout << a;}枚举类型:默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,当给一个名称赋予一个值时,其后面的都会比前面一个名称大 1,但其前面的还是按默认0,1,2...赋值。..原创 2020-05-21 19:13:58 · 755 阅读 · 0 评论