自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(405)
  • 资源 (25)
  • 收藏
  • 关注

原创 win11安装matplotlib过程

本文介绍了在Windows 11系统上离线安装Python 3.14的matplotlib库的方法。主要内容包括:1)从PyPI或国内镜像站下载matplotlib及其依赖的whl文件;2)按顺序安装这些whl文件;3)使用pip download命令自动下载依赖文件;4)添加清华镜像源以加快下载速度。文中还列出了具体需要下载的10个依赖文件名称,并提供了两种安装方式:手动安装和自动下载安装。

2025-11-22 15:48:14 406

原创 ‘pip‘不是内部或外部命令的解决方法

文章摘要:Windows 11安装Python 3.14后出现"pip不是内部或外部命令"的解决方法。需要在系统环境变量中添加Python安装路径和Scripts路径:打开"系统信息"→"高级系统设置"→"环境变量",在"系统变量"的Path中添加Python 3.14主目录及其Scripts子目录路径,完成后即可正常使用pip命令。(150字)

2025-11-15 14:53:48 166

原创 装饰器模式(c++版)

装饰器模式是一种动态扩展对象功能的灵活设计模式。它通过组合(has-a)而非继承(is-a)的方式,解决了传统派生方法导致的类膨胀问题。当需要为对象添加新功能时,继承方式会强制创建新子类,导致代码重复和维护困难。装饰器模式则采用可叠加的独立功能模块(装饰器),这些模块可以自由组合,避免了破坏开闭原则。就像活字印刷术中的单个字模可以灵活组合一样,装饰器模式支持按需配置功能,既提高了代码复用性,又符合依赖倒置原则。

2025-10-29 22:17:59 237

原创 ubuntu20.04编译qt源码5.15.3

本文介绍了在Win7宿主机环境下使用VMware 14.1.1和Ubuntu 20.04.6系统编译安装Qt5.15.3的完整流程。主要包括:1) 安装Ubuntu 20.04.6系统;2) 离线安装必要的依赖包;3) 下载并解压Qt源码;4) 修改源码文件后配置编译选项(特别指出需跳过QML相关模块);5) 执行make编译和安装;6) 配置环境变量;7) 通过简单Qt程序验证安装成功。文中特别强调了编译选项设置、依赖包安装顺序以及解决编译错误的技巧,并提供了完整的Qt项目配置示例。整个过程在Carbon

2025-10-03 00:06:24 624 1

原创 make时设置链接器选项的2种方法

文章摘要:探讨在使用make编译时如何指定libc库路径的两种方法。方法1是在Makefile中直接写死链接器选项LDFLAGS;方法2则是在调用make命令时通过命令行参数传入LDFLAGS选项。两种方式都能实现动态链接器和rpath的指定,前者适合固定配置,后者更为灵活。

2025-09-06 14:30:57 279

原创 学习模板元编程(3)enable_if

摘要:std::enable_if是C++模板元编程的重要工具,通过SFINAE机制实现条件编译。当第一个模板参数为true时,其type成员定义为第二个模板参数类型;为false时编译失败。C++14引入的enable_if_t简化了enable_if<T>::type写法。典型应用是在模板函数中通过返回值或参数类型约束模板实例化,但《Effective C++11》建议避免将其用于函数签名。示例展示了enable_if如何根据类型特性选择不同函数重载,但最佳实践推荐使用其他方式实现模板约束。

2025-08-10 21:31:23 479

原创 学习模板元编程(2)std::true_type/false_type

本文介绍了std::true_type和std::false_type的实现原理及其在条件编译中的应用。它们是基于integral_constant模板的特化类型,用于实现编译时的条件判断。通过一个编译失败的例子展示了传统if语句的局限性,并演示了如何使用true_type/false_type通过函数重载实现编译时分支选择,避免运行时错误。文章还阐述了如何利用特化和继承实现类型特征判断(如is_bool),强调了模板匹配原则在指针类型判断中的应用。这些技术为C++模板元编程提供了重要基础。

2025-08-02 17:59:31 811

原创 学习模板元编程(1)integral_constant

本文解析了C++模板元编程中的std::integral_constant实现原理。integral_constant是一个模板类,包含静态常量value、类型别名value_type和自身类型type。重点分析了其类型转换运算符operator value_type()和函数调用运算符operator()的实现细节,解释了它们如何返回value值。文章还强调了模板参数T的限制条件(不能为浮点或类对象类型),并提供了相关技术博客的参考资料。通过源码解析,展现了integral_constant在类型萃取中的

2025-08-02 15:24:28 541

原创 类型转换运算符(conversion operator)

C++支持在结构体/类中定义类型转换运算符,分为隐式和显式两种。隐式转换通过operator T()实现,可直接赋值;显式转换需添加explicit关键字,必须强制类型转换。示例代码展示了两种转换方式:隐式转换允许ST_IC对象直接赋值给int,显式转换需要(int)强制类型转换。这种机制提供了灵活的对象类型转换能力,显式转换可避免意外的隐式转换问题。

2025-08-02 14:34:21 276

原创 如何指定QTableView滑块的最小长度?

这里根据deepseek的回答,给一个例子:设置表格垂直方向滑块的最小长度为50像素。

2025-07-11 21:35:36 300

原创 CMake学习笔记(六)可以在CMake的function中修改function函数体之外的变量值吗?

本文介绍了三种在CMake中遍历子目录文件并打印内容的方法。方法1使用string(APPEND)和PARENT_SCOPE组合,将文件路径传递给父作用域;方法2利用${}变量替换和PARENT_SCOPE实现参数化文件遍历;方法3通过CACHE和FORCE将变量设为全局可访问。三种方法都能有效获取view和model子目录下的.cpp/.h文件路径,其中方法3还能使变量在项目全局范围内可用。每种方法都附有完整代码示例和详细解释,帮助理解CMake变量作用域机制。

2025-05-25 17:42:39 874

原创 使用arduino控制超声传感器HC-SR04测量距离

这里设置声速350m/s。当物体距离传感器<15cm时,测量值明显偏小,但是>=15cm时测量基本准确。超声波测距传感器HC-SR04,购自某宝,不到6元。arduino leonardo一个。

2025-05-02 19:20:34 408

原创 CMake学习笔记(五)区分PROJECT_SOURCE_DIR, CMAKE_SOURCE_DIR和CMAKE_CURRENT_SOURCE_DIR

2.2 如果子目录的CMakeLists.txt没有使用project命令,则PROJECT_SOURCE_DIR等于上一层CMakeLists.txt的PROJECT_SOURCE_DIR。不论CMakeLists在根目录还是子目录,也不论CMakeLists.txt里面有没有调用project函数,CMAKE_SOURCE_DIR都等于根目录路径。1 根目录下的CMakeLists.txt的PROJECT_SOURCE_DIR等于根目录路径;sub2目录下的CMakeLists.txt。

2025-04-26 17:28:39 616

原创 记一次表格数据排序优化(二)--std::sort + 运行模式光速排序

2 抛开排序之前的预处理遍历不谈,自写的冒泡算法在cache-miss上没有做任何考虑。std::sort在这方面可能也有所优化。沿着前面博客的思路,现在用std::sort代替自己写的冒泡算法。1 sort函数的复杂度是O(nlog(n)),而冒泡算法的复杂度是O(n^2)这里只修改了类ModelFreqDetect。在运行模式下测试,几乎没有任何卡顿。

2025-04-06 14:20:10 436

原创 记一次表格数据排序优化(一)--排序30000条数据有多卡

1 我的qt程序通过表格显示30000条数据。数据来自udp,udp每隔10秒发一次,一次含两个包。每包含有15000个数据。2 每条数据有三个属性,在表格中通过3列显示这三个属性。其中一个属性是区分“左”和“右”的。udp发送的两个包,一个包全是“左”属性,另一个包全是"右"属性。3 当用户点击三列中某一列的表头时,触发程序针对该列对应的属性进行排序。排序又分升序和降序。假如某列上一次使用升序排列,那么当用户再次点击该列表头时,该列变为降序排列。

2025-04-05 23:55:45 894

原创 MV结构下设置Qt表格的代理

所谓MV结构,是“model-view”(模型-视图)的简称。也就是说,表格的数据保存在model中,而视图由view实现。在我前面的很多博客,如我已经花了很多笔墨描述Qt表格的软件设计方法。在本篇文章中,我将介绍如何编辑表格--表格代理。

2025-01-28 16:45:50 1455

原创 linux源码编译libunwind

下载libunwind的源码。我选择9.0.0版本。

2024-12-22 20:09:26 675

原创 第一次使用address sanitizer记录

显然,delete 释放的首地址不对,比真正的首地址偏了一字节。于是,asan报错(上图绿色文字): 1 bytes inside of 10-byte region,并指出了错误发生的位置(紫色线标出的文字):main.cpp:6即main.cpp第六行。平台:中标麒麟,gcc 4.9.3。

2024-12-15 14:36:19 196

原创 源码编译glibc2.18过程记录

在某些操作系统里,libc.so.6没有debuginfo,影响我使用valgrind/systemtap调试。为此,我决定用源码编译一个与当前已有的libc.so版本相同的libc.so.6,并附带debuginfo。以下是过程记录。

2024-12-12 18:35:49 664

原创 理解原子变量之四:可见性、memory_order_acquire与 memory_order_release

则b线程读取该原子变量后,不仅可以看到该原子变量的更新值(也就是a线程写入的值),还能看到a线程对该原子变量进行写入之前的所有其他的写操作的效果,不论是针对该原子变量的,还是针对其他变量的,也不论这些变量是不是原子变量,也不论使用何种内存序。里的实例3里面,我们看到,如果在一个线程里修改原子变量done,另一个线程读取done时,就会看到这个变化。这就是原子变量的可见性。1 a线程对某原子变量进行了写入操作,且使用了内存序memory_order_release,最重要的是红线标出的这句话。

2024-11-23 18:51:33 630

原创 理解原子变量之三:原子性与memory_order_relaxed

在一位C++大神 “高效程序员” 的公众号里,有这么一篇文章介绍原子变量《C++11开发中的Atomic原子操作》。里面有这么一段话:“...原子操作,基本都包含...三个方面...的语义:操作本身是不可分割的(Atomicity),一个线程对某个数据的操作何时对另一个线程可见(Visibility),执行的顺序是否可以被重排(Ordering)”。Atomicity翻译过来就是原子性,Visibility翻译过来就是可见性。本文在前面两篇文章的基础上,进一步讲述原子性的含义。

2024-11-23 14:55:34 421

原创 源码编译安装perf

本文介绍如何通过源码编译的方式实现perf的安装。依赖安装完毕后,make clean,然后从新make perf。7 编辑~/.bashrc,在.bashrc的PATH加入/usr/local/bin。6 make结束后,将产生的perf拷贝到/usr/local/bin。在make过程的一开始,可能会检查依赖的情况。如下图所示,这里面,9 检查perf版本,有输出则安装成功perf --version。对于中标麒麟,虚拟机,版本是linux-4.4.13。,通过elfutils安装,参考我的博客。

2024-11-14 22:08:52 1142

原创 理解原子变量之二:从volatile到内存序-进一步的认识

实例1,2,3都是在vs2013下演示的。即使遵循相同的C++标准,不同的编译器对同一个标准的贯彻程度也不一样:有的编译器严格遵循标准,既不多做,也不少做;对照实例1,在不使用volatile的情况下,子线程workerThread对done的修改,没有影响到主线程的while(!编译器意识不到子线程也在改变done的取值,所以就认为done是常量,而不会在运行到while()时读取done的实际值,于是while(!反观实例2和3,子线程修改了done,主线程的运行随之受了影响,这就是可见。

2024-11-03 11:30:09 1119

原创 理解原子变量之一:从互斥锁到原子变量,最粗浅的认识

多线程编程对于程序员来说,是一项非常重要的技能。在C++11标准问世之前,C++标准是不支持多线程的。在C++11出台前,如果你想在linux平台进行多线程编程,就要使用linux的多线程库pthread,而pthread是按照POSIX标准实现的,与C++标准无关。在C++11标准下,你可以使用std::thread,实现多线程编程。但是,多线程编程涉及的不仅仅是thread,编程者也要考虑资源竞争的情形,这就涉及到互斥锁、信号量等。这些也包含在c++11中。

2024-11-01 13:34:34 965

原创 初尝类型萃取--typename、模板偏特化、和traits之(三)类型萃取

本文作者在看过公众号《C++学习与探索》的文章《【一分钟学习C++】萃取机制》后,对类型萃取(type_traits)有了初步的认识,所以写下这篇博客。《【一分钟学习C++】萃取机制》门槛较高,如果没有理解typename和模板偏特化,是难以理解该文意思的。本文以及前面的两篇文章(初尝类型萃取--typename、模板偏特化、和traits之一、二)目的是将萃取涉及的基本知识点,如typename、模板偏特化先讲清楚,然后通过讲解例子的方式,使得类型萃取能被更多读者理解。

2024-10-17 20:32:16 1201

原创 初尝类型萃取--typename、模板偏特化、和traits之(二)模板偏特化

这里只讨论类的偏特化。

2024-10-16 20:46:03 360

原创 初尝类型萃取--typename、模板偏特化、和traits之(一)typename

此时的typename可以用class代替。

2024-10-16 20:32:38 399

原创 CMake学习笔记(四)cmake --build使用踩坑记录

将在目录中产生结果文件。但是实测发现,这里有坑:如果CMakeCache.txt等文件没有产生在中的话,cmake --build 将报错。只有先在目录下执行cmake ..,使得CMakeCache.txt产生在中,cmake -build 才能起作用。编译结果最终产生在build目录下。

2024-10-10 19:39:05 3651 1

原创 如何在Android Studio中找到CMakeLists.txt的打印信息

的描述,MESSAGE函数打印的STATUS级别的信息在android studio中是看不到的。所以采用WARNING级别打印。下面使用android studio 2023.2.1打印信息。

2024-10-09 22:06:03 809 1

原创 安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro。

2024-10-03 08:46:21 2207

原创 wireshark使用要点

但是实测wireshark发现,tcp[0:X], tcp[19:X], tcp[21:X]...等过滤效果都一样。ip.addr == XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX,或者消息目的地址为XXX.XXX.XXX.XXX的信息。ip.dst == XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息。ip.src == XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息。

2024-09-25 19:02:32 753

原创 冒泡排序的C++语言实现(不用std::sort)

自己写一个冒泡排序的代码。

2024-09-17 17:58:07 325

原创 比较stl库的ostringstream与Qt的QString::arg(),QString::number()

对于stringstream,使用比较繁琐,要联合使用std::fixed和std::setprecision才能实现固定小数位数显示,qstring则要简单一些。注意,使用qstring的时候,不论使用arg还是number,format输入参数都必须是'f',不能用'g',否则可能无法获得理想的效果。考虑STL库的ostringstream或者Qt的QString::arg(), number。显示一个float或者double类型的数,要求小数点后的数字位数为定值。

2024-09-11 22:07:56 534

原创 std::map 合并

假如map2的某些键也出现在map1里面,则map1中重复的键值对不变,map2中重复的键值对无法覆盖map1。采用insert函数实现两个map的合并。

2024-09-10 17:30:42 429

原创 std::bind与std::ref配合使用时要注意的几个问题

在前面的博客,我们看到假如std::bind的输入函数的输入变量是引用类型,则我们可以在std::bind中用std::ref修饰它们。

2024-06-23 15:52:46 404

原创 浅析std::ref

根据等消息来源的描述,需要std::ref的场景主要是如下三种:假如std::thread需要调用一个函数,且这个函数的输入参数是引用的话,则std::thread对这个参数的调用必须用ref修饰。假如sid::bind需要调用一个函数,且这个函数的输入参数是引用的话,则std::bind对这个参数的调用必须用ref修饰。stl库调用,比如for_each的输入参数里也可以有一个函数指针。假如这个函数的输入参数是一个引用,则函数指针也要用std::ref修饰。下面通过几个实例来验证以上描述的真伪。

2024-06-23 15:31:13 1351

原创 从三个示例看C++中 define...## 的用法

C++中define ...##...的作用是把##两边的内容连接到一起。

2024-05-18 17:05:27 443

原创 vs2008使用 openmp

环境windows7 vs2008。

2024-04-15 15:09:28 453

原创 CMake学习笔记(三)区分macro与function

因为macro的set(in "2")又定义了一个新的变量in,并赋值2。在执行set(in "2")之前,message("in = "${in})的内容已经被替换成message("in = 1"),所以set(in "2")对后面的语句没有影响,仍然输出1。(事实上,set(in "2")把in当成了一个新的全局变量,后面还会提到)。这也是set(in "2")起作用的原因。可见,test(1)调用时,in = 1,但是set(in "2")随后将in 改为2.所以接下来打印in = 2。

2024-04-05 18:31:35 868

原创 理解pytorch的广播语义

1 两个tensor都至少有一个维度;2 两个tensor的维度个数要么完全一样,那个维度较少的tensor可以把自己缺少的维度补充为1;3 补齐可以补充多个维度,但是只能发生在所有已有维度的左边,不能插在已有维度之间,也不能出现在已有维度右边。4 假如运算是原位运算,则保存运算结果的变量的尺寸不应在运算前后发生变化。

2024-04-04 11:07:00 1555

assimp 3.1.1的源码以及 用vs2013, vs2019分别编译产生的dll和lib(64位)

assimp 3.1.1的源码, 以及 用vs2013, 编译产生的64位dll-lib库; 用vs2019编译产生的64位dll和lib库

2022-04-23

定制QWidget标题栏的示例,并含有qss配置QTabWidget样式的示例

定制QWidget标题栏的示例,并含有qss配置QTabWidget样式的示例,以及展示如何显示一个不在状态栏出现的窗口

2022-04-10

地球纹理贴图

用于OpenGL绘制地球,与我的博客《qt + opengl 绘制地球》中的代码配合使用

2017-11-22

基于qt的视频播放器

基于qt的视频播放器,支持本地mp4文件载入,进度显示,进度拖动

2018-11-03

Qprocess实例

演示QProcess的使用方法,在QT中直接打开word文档,并且考虑了指令中含有汉字的处理,和含有空格的处理。并考虑了内存释放

2020-10-01

ubuntu20.04下,采用Qt编译cuda的实例代码

ubuntu20.04下编译cuda,采用Qt的实例代码

2022-01-12

mfc写入xls文件示例

mfc写入xls文件示例,VS 2008亲测可以运行。但是后来用vs2017打开过一次,sln被升级了。可以参照我的博客新建一个同名工程,再操作一遍,把其中的cpp文件,h文件和资源文件拷贝到新的工程里编译运行即可。

2018-09-05

CVIEW显示灰度图示例

CVIEW显示灰度图示例,代码在https://blog.youkuaiyun.com/liji_digital/article/details/84502750 有解释

2018-11-25

基于opengl的曲线绘制示例

基于opengl的曲线绘制示例,缺点是,没有画出坐标轴。可以参考https://blog.youkuaiyun.com/liji_digital/article/details/78473568 来添加坐标轴

2018-10-15

tableWrap.rar

qtableview文字根据列宽自动换行的方法

2021-05-27

gdalTif.rar

利用gdal将多通道tif转化为bmp

2021-04-10

expandable.rar

基于qt可伸缩的窗口实现示例

2021-06-10

不使用bind的UDP

小例子。不使用bind函数,也可以建立udp套接字并与一个已知端口通信

2019-02-21

QT信号槽传递自定义结构体示例

ArbStruct用于生成封装的类,UseArbStruct是主程序,它调用了ArbStruct

2018-09-13

release.rar

这是c++ 多线程编程示例,演示了release 模式编译后带来的死循环问题。具体代码的解释见https://blog.youkuaiyun.com/liji_digital/article/details/104542544

2020-02-27

虚拟地球apk

将apk下载到android手机上,安装即可。安装之后,运行程序,并将手机置于google的cardboard中,用户将看到一个有立体感的旋转地球。

2018-04-26

pyserial-2.6

解压即可,看我的博客《利用python发出rs232信号(一)》里面有详细介绍

2016-07-31

htmlTable.rar

采用qt + html实现在表格中嵌入文本框+下拉框。文本框可编辑;下拉框中的选项可变。html与qt实现数据交互

2020-07-26

GDAL保存灰度BMP示例

根据我的博客《利用GDAL保存bmp格式的灰度图(一)》而上传的代码

2018-11-30

ubuntu20.04.6的一部分deb包

ubuntu20.04.6的一部分deb包,编译qt需要

2025-12-10

排序测试数据,分两部分,一个是属性为左,另一个属性为右 两者各15000条数据

排序测试数据,分两部分,一个是属性为左,另一个属性为右 两者各15000条数据

2025-04-06

std sort 完成qt表格排序

std sort 完成qt表格排序

2025-04-06

qt表格排序示例,使用mv结构

qt表格排序示例,使用mv结构

2025-04-05

介绍如何给Qt表格添加代理

介绍如何给Qt表格添加代理

2025-01-28

IMG_20240216_175113.jpg

IMG_20240216_175113.jpg

2024-02-16

QCustomPlot示例

QCustomPlot示例

2023-04-01

qsqlrelationaltablemodel使用示例

qsqlrelationaltablemodel使用示例

2022-11-06

Qt程序,将三沙市的GeoJson格式数据转化为mif文件

Qt程序,将三沙市的GeoJson格式数据转化为mif文件

2022-11-02

qt使用QProcess实现父子进程通信,适用linux平台

qt使用QProcess实现父子进程通信

2022-10-27

设置QTableView的内容自动换行,代理方式

采用代理方式,实现qtableview的文字自动换行

2022-09-25

示例:如何设置编辑QTableView单元格时的字体颜色

如何设置编辑QTableView单元格时的字体颜色

2022-09-25

基于qt的程序,演示了如何通过setStyleSheet配置checkbox按钮的外观。

基于qt的程序,演示了如何通过setStyleSheet配置checkbox按钮的外观。包括源代码和可执行程序。

2022-06-25

链接次序导致程序行为变化的示例

采用Qt编写。Dll1和Dll2是两个库,Dll1PlusDll2是调用前两者的工程。

2022-05-22

ctk框架源码,以及ctkData资源

ctk框架源码,以及ctkData资源,供编译ctk框架用

2022-05-04

使用qt读取xml文件并写入另一个文件

使用qt读取xml文件并写入另一个文件的示例

2022-05-01

基于Qt开发的C++程序。利用assimp读取gltf/fbx等文件,并显示

基于Qt开发的C++程序。利用assimp读取gltf/fbx等文件,并显示。用vs2013编译

2022-04-25

DXSDK 2010 Redistribution 32位 2010 Redistribution 64位

DXSDK 2010 Redistribution 32位 2010 Redistribution 64位 CMake assimp所需材料

2022-04-23

空空如也

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

TA关注的人

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