自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 资源 (5)
  • 收藏
  • 关注

原创 CMake-环境变量介绍

例如CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, CMAKE_LIBRARY_PATH等。由调用CMake的进程的环境变量进行初始化,可以通过set()和unset()改变值,但是只影响当前CMake进程。cmake -E environment显示当前所有环境变量。判断是否有定义某个环境变量,注意判断语句里没有。在一个CMake进程中环境变量具有全局作用域。符号,环境变量名字中的特殊符号要转义。使用ENV操作符获取环境变量,例如。在修改的环境中运行cmake,

2025-03-24 00:05:25 503

原创 C++-C++中的几种cast

的基类和子类之间的转换,通常在基类指针向下转换到派生类指针时使用。int, float, bool等POD类型互转。任意类型之间的转换,主要在底层代码中使用。

2025-03-23 21:29:18 301

原创 Qt-Q_ENUM宏和QMetaEnum类

Q_ENUM是一个宏定义,它的作用是将一个枚举类型注册到元对象系统,从而能够通过QMetaEnum类获得一些关于enum类型的一些信息,例如获取enum类型的名称字符串,enum值和字符串互相转换,enum类型保存在QVariant中,enum值的个数,qDebug()打印enum值名称等等。用法:在一个继承于QObject的子类中声明enum,然后在定义后面使用Q_ENUM宏注册enum类型。如下:随后通过QMetaEnum获取enum类型的相关信息。使用Q_ENUM声明的枚举类型已经在元对象系统中

2025-03-23 20:32:28 293

原创 Qt-D指针与Q指针的设计哲学

在探索Qt源码的过程中会看到类的成员有一个d指针,d指针类型是一个private的类,这种设计模式称为PIMPL(pointer to implementation),本文根据Qt官方文章介绍d指针与q指针,理解其中的设计哲学。

2025-03-16 20:37:30 788

原创 Qt-一篇文章搞定QtCreator和Visual Studio源码调试环境配置

当我们遇到一些Qt底层问题或者需要学习源码,就需要在IDE中配置环境能够调试Qt源码,本篇文章将告诉你如何在QtCreator和Visual Studio上配置,并从原理上明白为何这样做,当你需要在其他IDE中配置时,知道原理了也会让你懂得举一反三,让我们开始吧 😃。

2025-03-15 18:29:27 1041

原创 OpenGL-基础知识(更新中)

本文基于The Cherno在Youtube上的OpenGL系列视频总结出的笔记,等这个系列视频学习完后,将更加系统详细的学习《计算机图形学编程(使用OpenGL和C++ 第二版)》这本书。个人认为看cherno的视频上手速度更快,而且他对基本概念和原理的解释非常通俗易懂,对于想快速学习OpenGL的同学很适用。目前学习进度:9/31。

2025-02-12 23:46:15 802

原创 OpenGL-error C7548: ‘layout(location)‘ requires “#extension GL_ARB_separate_shader_objects : enable“

最近跟着Youtube Cherno学习OpenGL,编译shader报错,检查了一下发现是编译了两个同样类型的shader,导致报错。把GL_VERTEX_SHADER改成GL_FRAGMENT_SHADER就好了。低级错误,还是不够细心啊…

2025-02-11 23:47:13 154

原创 C++-回调函数导致std::sort crash

而strcmp函数返回值为int,对于任意非0值,都视为true,所以对于comp(“a”, “b”)和comp(“b”, “a”)都返回true,不满足严格弱序的条件。当我们使用std::sort的时,如果提供了比较函数,要注意比较函数需要满足一定条件,否则可能会引发crash。可以看到debug版本下被告知比较函数无效,但是在Release版本,则不会有报错,但是排序结果错误。使用visual studio生成debug版本,运行有如下报错。我们可以看到比较函数必须满足。

2025-01-15 23:33:29 448

原创 C++-标准库 weak_ptr

shared_ptr的作用主要是在最后一个指向资源的shared_ptr销毁时自动释放资源,然而在某些场景下这种行为可能不被期望。两个或者多个对象都使用shared_ptr,并且相互通过shared_ptr指向对方,如果存在一个环路(cyclic reference),那么由于环路上的shared_ptr的use_count最终无法降为0,所以环路上的资源将无法被释放。当我们想使用“希望共享但不拥有”某个对象的语义的情况下,shared_ptr也无法提供此语义。

2024-09-04 00:19:27 377

原创 C++-标准库 智能指针smart pointer

指针让我们在域边界之外拥有reference语义,然而,确保“pointer的寿命”和“其所指对象的寿命”一致却是件棘手的事。C++11提供两大类型智能指针:shared_ptr和unique_ptr。shared_ptr实现共享式拥有的概念。多个shared_ptr指向同一个对象,当最后一个shared_ptr析构时,指向的对象也被释放,标准库还提供weak_ptr, bad_weak_ptr, enable_shared_from_this等辅助类。unique_ptr实现独占式拥有的概念。

2024-08-27 23:47:52 527

原创 C++-标准库 tuple

tuple表示一个不定数量的值的组合,即一个异质元素列,每个值的类型都要求被指定或者可以编译期推导。

2024-08-13 23:36:44 447

原创 Verilog-Behavior Level 和 RTL Level 和 GATE Level的区别

硬件设计中对硬件的描述可以具有不同的抽象级别,以Verilog为例:- Behavior Level。描述的是硬件的行为,当我们在看到如下关键字时就是行为级别的代码:`#`,`wait`,`while`,`force`,`release`等,行为级别的代码通常比较直观,但可能不可综合。- RTL Level。RTL即Register Transfer Level寄存器传输级别,使用`always`和`assign`语句块组成的代码,这个级别关注的是数据保存的地方,数据受到什么因素影响,数据的流向等等。R

2024-06-16 23:06:54 1035

原创 AI-windows下使用llama.cpp部署本地Chinese-LLaMA-Alpaca-2模型

本项目基于Meta发布的可商用大模型Llama-2开发,是中文LLaMA&Alpaca大模型的第二期项目,开源了中文LLaMA-2基座模型和Alpaca-2指令精调大模型。这些模型在原版Llama-2的基础上扩充并优化了中文词表,使用了大规模中文数据进行增量预训练,进一步提升了中文基础语义和指令理解能力,相比一代相关模型获得了显著性能提升项目地址https://github.com/ymcui/Chinese-LLaMA-Alpaca-2。

2024-04-21 16:56:47 1550 2

原创 《富爸爸穷爸爸》笔记

每个孩子都需要得到更多的、不同的教育,他们得知道真实生活中的游戏规则,各种不同的规则- 当我们作为父母建议自己的孩子“去学校,好好学习,找份好工作”时,我们常常只是出于文化习惯才这么做的,大家都认为这么做是对的- 一个人的观念对他的一生影响巨大- 我的一个爸爸总是习惯说“我可付不起”,而另一个爸爸则禁止我们说这样的话,他坚持让我这样说:“我怎样才能付得起?”- 一句让你放弃,而另一句则促使你去想办法- 知道什么时候要迅速作出决定是一项非常重要的技能- 你必须明白资产和负债的区别,并且购买资产

2024-04-04 22:16:11 737

原创 C++-三目运算符注意点与临时变量的坑

上述代码的最后一行会导致crash,原因在于,三目运算符返回的是一个左值,即可以看作是一个临时变量,我们知道变量都有且只有一个类型,由于我们getName()的返回值是一个string,所以临时变量就是string类型,此时如果三目运算符条件为假,那么就将一个0值(nullptr)赋给了一个string,而这会导致程序崩溃。这里我们的问题在于忽略了三目运算符返回的是一个左值(变量),并且让表达式在条件为真和假的时候返回的类型不兼容导致的。,然后返回的值作为三目运算符的条件。

2024-03-27 23:53:04 333

原创 C++-获取struct成员变量的偏移量

将表达式从内向外解析,首先给出0地址或者使用nullptr均可,然后强转成结构体指针类型,接着访问成员a,然后取a的地址,由于一开始给出的地址是0地址,所以a的地址便是相对于结构体起始地址的偏移量。改变struct member顺序。

2024-03-24 15:51:06 334

原创 Qt-QDialog非模态置于窗口之上且操作主窗口不隐藏dialog的方法

将当前widget提升到parent widget stack的最顶层,这使我们在操作其他窗口时,也能保持dialog显示在其他窗口的上方而不会被遮盖住。方法会重置其windowFlags,因此我们将其原始windowFlags传入作为参数以保留原始属性。不传入将导致dialog显示异常。以非模态显示dialog,是我们能操作dialog以外的其他窗口。QDialog继承自QWidget,

2024-03-21 00:07:17 1426

原创 Linux-vim常用操作

本文介绍一些本人在使用vim时最常用操作:打开文件```bashvi 1.cpp```同时打开多个文件```bashvi -O 1.cpp 2.cpp```此时会分成左右两个区域分别对应两个文件。按ctrl+w两次切换当前编辑的文件命令模式操作:- `o`新起一行- `dd`剪切一行- `ndd`剪切n行- `yy`复制一行- `nyy`复制n行- `p`在当前光标所在行下一行粘贴剪贴板内容- `u`undo撤销到上一次编辑状态- `ctrl+r` redo重做编辑

2024-03-14 00:38:02 352

原创 Qt-QPainter drawText方法不同重载之间的区别

QPainter类的drawText方法有如下重载,可以分成两类,一类是提供点坐标绘制文本,一类是提供方框绘制文本。区别在于提供点坐标进行绘制的时候,点是在文本的左下角。而提供矩形的时候,矩形的点是在文本的左上角,同时也是矩形的左上角。可以看到两个函数提供的点坐标锚定的是文本的不同位置,使用时要多多注意。

2024-03-14 00:16:39 909

原创 C++-gdb调试常用功能

gdb调试常用功能如下,其中bin为要调试的程序,arg为参数### 启动gdb- 启动调试 gdb bin- 带参数启动 gdb --args bin arg1 arg2- so预加载LD_PRELOAD=/path/to/lib.so && gdb bin### 运行程序- r 开始运行程序- r arg1 arg2以参数启动程序### 设置断点

2024-01-25 22:17:14 561

原创 Qt-QFileDialog保存文件及获取带扩展名的文件名

构造函数的第一个参数是parent第二个参数是dialog标题,第三个参数是默认打开的文件路径,如果文件路径带有文件名则文件名会自动填入文件名一栏中,第四个参数是过滤的文件类型,括号里面是扩展名,括号前面是扩展名的文件类型描述。方法,返回的文件名是不带后缀的,也无法通过设置default suffix来改变此行为,因为dialog是方法内部创建的,我们无法访问到。接口在文件名没有后缀的情况下会自动添加默认后缀名,如果有后缀名则不添加,这里的“文件名”指的是dialog中这一栏的值。路径+abc.txt。

2024-01-23 22:13:38 2169 2

原创 Thinking-自我提升的方法论

来自抖音号“玮成同学”的观点总结。

2024-01-22 00:57:29 555

原创 Algorithm-Left Edge算法

所谓冲突图(Conflict Graph)是一种用来表示资源分配冲突的图结构。表示冲突图最少需要3种颜色使得相邻颜色不相同。

2024-01-03 23:38:54 759

原创 Qt-QTransform介绍与使用

我们知道Qt的坐标系是左上角为原点,x轴向右,y轴向下,屏幕上每个像素代表一个单位,那么,如果我们想要在屏幕上建立自己的坐标系用于绘制,就需要借助QTransform。scale函数将xy轴放大缩小,比例值为Qt像素值/自定义坐标像素值,1/2表示,1一个原单位值等于现在2个单位值,其中负数表示改变y轴为原来相反方向。可以看到Qt坐标系(红),自定义坐标系(绿)和自定义坐标系中绘制的矩形,实际为25*100的矩形,且可以发现penWidth宽度在y轴也发生了放大。

2023-12-19 00:09:08 1168

原创 C++-LD_PRELOAD

LD_PRELOAD是linux上的一个环境变量,作用是在程序启动前先加载这个动态链接库(无论程序本身是否需要)。

2023-12-17 16:01:50 305

原创 Qt-Q_OBJECT宏使用与“无法解析的外部符号qt_metacall/metaObject/qt_metacast“

这里的几个函数的声明是由Q_OBJECT宏引入的,而其对应的实现是由moc实现的,如果我们更新了代码但是没有执行qmake,moc可能就无法识别到这个宏从而无法帮助我们生成moc文件,qtcreator中右键项目点击执行qmake再生成即可,或者直接点击重新构建即可。一般来说Qt强烈建议继承QObject的子类都加上Q_OBJECT宏。

2023-12-06 22:59:00 1316

原创 C++-空指针调用不会引起crash

注意:在C++中对nullptr的访问是undefined behavior,虽然大多数时候实际不会造成崩溃,但我们不能依赖这种未定义的行为,因为它可能崩溃也可能不崩溃,跟编译器也有关系,还是应判断空指针,避免这种情况发生。,类方法是类的一部分,而非对象的一部分。可以看到对方法的调用跳转的位置是一样的,这证明了类方法是类的一部分而非对象的一部分,调用后走到。将ra引用绑定到对pa的取值上和调用func都可以正常执行,不会导致崩溃,这是。,汇编对应的代码将会基于0地址取对象中的n的值,此时才会造成崩溃。

2023-12-05 23:29:15 391

原创 LLM-Intro to Large Language Models

LLMwhat is?2 files。

2023-12-03 23:54:24 512

原创 Qt-QSplitter正确设置比例以及移除widget

网上说的setStetch方法对我不管用,并且会受到sizePolicy和minimum size影响,因此我并不推荐使用。splitter大小不会变化,比设置的值多的和少的空间将会按照sizes之间的比例分配。size policy保留,且widget至少有minmum size的最小值大小。

2023-11-30 22:43:22 1743 1

原创 Qt-No relevant classes found. No output generated问题解决

qt在编译时会使用moc,即Meta-Object Compiler,对任何继承于QObject的子类我们都应在类开头写上Q_OBJECT,而moc做的一件事情便是将带有Q_OBJECT的类的cpp文件使用moc进行处理,这是因为Q_OBJECT实际上声明了一些函数,而moc负责对其进行实现,Qt信号槽的能力就依赖于moc,处理生成的文件名称为moc_xxxx.cpp,最终C++编译器是将这些moc生成的文件再拿去编译的。这其实不是一个错误或者警告,而是一个信息而已,需要根据我们的具体情况解决。

2023-11-30 22:19:56 1185

原创 C++-一些关于C++、你可能忽略的知识点(更新中)

变量并指向一个字符串常量,虽然不带const,但不应改变其字符串内容,因为这是一个undefined behavior,这个字符串常量存储的位置是可执行文件的代码段,该段仅可读而不可写。如果要声明可以改变其指向内容的char。的区域,我们改变的不是字符串常量本身,而是s指向的内存区域,第一句代码执行后,字符串常量的内容已经拷贝到可读写的栈中。此时s指向的地址在栈上,因此可以改变其指向的内容,声明一个不带const修饰符的char。可以直接使用TestClass::A。:字符串常量永远存储在。

2023-11-28 22:26:11 449

原创 Linux-chrpath指令

chrpath指令用于改变程序的rpath/runpath,从而改变.so动态库搜索路径,常见用法为。第一种用法将一个指定的路径替换原程序的rpath/runpath。第二种用法中的$ORIGIN表示程序所在路径。查看程序rpath/runpath。

2023-11-27 23:38:49 811 2

原创 UVM-什么是UVM方法学

百度对UVM的解释如下:通用验证方法学(Universal Verification Methodology, UVM)是一个以的验证平台开发框架,验证工程师可以利用其构建具有的功能验证环境。

2023-10-22 12:01:50 1695

原创 C++-标准库 std::pair介绍

第三个构造函数的含义是,将first_args tuple中的元素作为参数传递给first类型的构造函数,first_args tuple中的元素作为参数传递给second类型的构造函数,piecewise_construct_t是一个struct类型。std::piecewise_construct是std内部声明的一个变量,t中的1和2.22将作为Foo类的构造函数参数传入。前两个构造函数是我们常见的形式,传递一个实参给first,另一个实参给second,并支持move语义和隐式类型转换的支持。

2023-10-15 23:25:41 876

原创 C++-标准库 nullptr关键字

nullptr被自动转换为各种pointer类型,但不会被转换为任何整数类型,它拥有类型std::nullptr_t,定义于,是一个基础类型。

2023-10-07 23:20:14 167

原创 Qt-事件循环与QtConcurrent、QThread结合使用时注意的点

【代码】Qt-事件循环与QtConcurrent、QThread结合使用时注意的点。

2023-08-23 00:21:23 1311

原创 Qt-QBasicTimer can only be used with threads started with QThread原因探究

QBasicTimer can only be used with threads started with QThread。在项目中检查发现确实使用了一个static的QDialog,并且ui包含combobox的时候退出时会打印warning,如果没有combobox则不会。中,提问者的现象和我一致,猜测的原因是QObject和QApplication的析构顺序造成的。查找资料后发现,报错的原因很可能是因为使用了static QObject造成的

2023-08-22 23:31:53 2208

原创 System Verilog-packed array以及unpacked array

维度在标识符前面的部分称为,在标识符后面的部分称为,一维的pakced array也称为vector。

2023-08-10 22:50:46 2296

原创 System Verilog-数据类型

System Verilog数据类型分为两大类,一类是变量(variable),一类是网线(net)。这两种类型在赋值和存储值上有所区别。一般声明wire和reg的地方大部分都可用logic代替,它既可以连续赋值也可以过程赋值,但不能有多驱动。还有一些数据类型只能存储0和1,如。一些数据类型可以存储上述4种值,如。System Verilog还支持。

2023-08-10 21:37:29 305

原创 C++-使用clang-format格式化代码

我的解决方法是在https://github.com/llvm/llvm-project/releases下载LLVM-16.0.5-win64.exe。windows下,在.pro目录下创建.clang-format文件,linux下,在用户目录创建.clang-format文件。,解压后在bin下找到clang-format.exe,修改Clang Format command为exe。重启后,点击工具->选项->Beautifier->Clang Format,选择使用File定义风格。

2023-08-08 23:09:43 626

C++-Nuget打包-上传工具

## 使用说明 为了实现方便起见,使用软件前有部分约定需要遵守,否则无法正确使用该工具: - 应配置好环境变量,使得能在命令行中直接调用nuget和devenv.com - 项目生成dll或者lib - 项目目录下应包含一个include文件夹,包含所有dll或lib对外提供的头文件,目录结构可嵌套 - 版本号由数字+'.'组合,通常应为x.x.x或者x.x.x.x 正常的使用流程为: 1. 选择解决方案文件 2. 项目名称、ID、版本号会自动填写 3. 手动填写描述和作者信息 4. 选择源地址,即Nuget包要上传的地址 5. 点击”生成Nuget包“ 6. 生成成功后,点击“上传Nuget包”,将上传nuget包到指定源服务器上 第一次使用时,请先点击设置菜单中的“nuget源设置”,点击“添加”配置源名称和地址(仅支持http源),单击某行后点击“删除”以删除相应配置项,点击打叉按钮保存。 补充说明: - 软件会记忆上次关闭时使用的源 - 错误信息会使用红字打印在下方输出窗口中 - 如果原项目有依赖其他nuget包,将自动添加依赖关系 - 工具会修改项目vcxp

2022-05-26

life_game.7z

生命游戏,可自定义和交互。操作: start or stop:space button speed up:UP arrow speed down:DOWN arrow change life:click life

2020-06-05

TodoList任务清单

根据http://axuebin.com/react-todolist/做的TodolList。css未使用AntUI,因此checkbox和输入框看起来比较糟糕,不过功能一样的,最终有用的文件其实就两个,一个是webpack打包出来的bundle.js,一个是index.html,其他内容只是开发过程中需要的。

2019-03-18

TicTacToe井字游戏

根据react官网教程所作,并且完善了最后的提升难度部分

2019-03-18

python基础教程思维导图

Magnus Lie Hetlan的《python基础教程》的基础知识部分,覆盖了前十章的内容,涉及python基本的数据类型,语法知识,语法糖等内容,本书之后的内容主要是对各个常见模块的使用,与基础知识部分不太相关,自行选区需要的模块练习即可。注释写了一些函数或者方法的常见用法,注意点,概念的介绍和个人的理解,方便以后查阅

2019-03-03

空空如也

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

TA关注的人

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