自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 收藏
  • 关注

原创 Qt不能在线程函数操作UI

Qt的官方文档虽然并没有明确说明,不能在子线程中操作UI,但是,因为Qt是事件循环机制,所有的UI事件都是在主线程中处理的,如果在子线程中直接操作UI,就会存在线程安全问题,严重时候会使程序挂掉。参数5:Q_ARG宏,用来向函数传递参数,宏的第1个参数是函数参数的类型,第2个参数是传递参数的变量名,如果函数有多个参数,可以继续往下使用Q_ARG宏来传递。参数4:Q_RETURN_ARG宏,用来接收函数的返回值,宏的第1个参数是返回值类型,第2个参数是接收返回值的变量名。参数2:调用的方法名。

2023-12-21 21:52:57 1021

原创 C++也要玩反射

不论是哪种工厂模式,都逃不开一个根据字符串来判断具体创建具体产品子类的逻辑,每添加添加一个产品子类,都要去修改这部分的逻辑,这很不优雅。那有没有一种可能,就是添加子类产品的时候,只需要添加子类实现即可,不需要去修改这个判断逻辑呢?当然有,这个方法就是反射

2023-12-02 19:48:24 541

原创 工厂模式-

适用于根据特定条件创建相应子类的情景,添加新功能时只要添加一个子类,再在工厂类中添加相应的条件分支即可,不需要修改客户端代码。

2023-11-27 20:22:10 437

原创 Linux系统无法发送组播消息

此方法只是临时生效,机器重启或者拔掉网线后都会失效,需要重新执行该命令才行,下面介绍用就方法,重启和拔网线后依然生效,打开下图中IP配置界面。点击图中右下角的“路由”按钮,在弹出来的界面中配置好组播IP和子网掩码保存即可,不需要重启,网卡服务会自动重新启动。临时方法,执行系统命令。

2023-11-19 09:11:06 335

原创 字符编码和Qt中文乱码相关问题这里都给理清楚了

本文可以帮你彻底理清Qt程序中的中文乱码问题,做到不但知其然并且还能知其所以然。做中文软件开发的朋友应该都遇到过中文乱码问题,遇到这种情况,很多人都是百度一下,学到一个方法,放到程序里一试,见到确实有效,然后就丢在那不管了。这样做关键的问题有两个:一是很容易出现,在这个情况下有效,但到了另一个情况就无效了,还要找其他的方法去处理;二是有些东西根本就不是处理字符编码问题的,但用了确实能解决乱码问题,就会造成乱用的现象

2022-04-20 22:04:13 1734 3

原创 小型内存池

我们都知道,不管是用new还是用malloc,每次系统分配内存的时候都要占用系统资源的。而且每次我们向操作系统分配内存的时候,得到的都是包含cookie的内存块,其实际大小要大于我们所申请的内存大小。对于频繁申请内存的情况,我们可以一次向系统申请一大块内存,然后自己管理,这样既能节省系统调用的时间,能节省多个cookie所占用的空间。

2021-12-08 22:15:41 241

原创 c++中关于new和delete的内容都在这里了

new expressionnew一个类型,会创建一个该类型的内存,然后调用构造函数,最后返回该内存的指针注意:该操作是原子性的。在vc6中的实现如下void *operator new(size_t size, const std::nothrow_t &) _THR.

2021-12-08 22:06:00 1110

原创 Windows平台coredump处理

只适用于vs编译器,mingw好像是不支持MiniDumpWriteDump函数,这个不太确定,可以自己测试一下#ifdef Q_OS_WIN#include "dbghelp.h"#pragma comment( lib, "Dbghelp.lib" )LONG WINAPI AppExceptionCallback(struct _EXCEPTION_POINTERS *ExceptionInfo){ if (!QDir("logs").exists()) { QDir().mk

2020-11-15 16:09:38 914

原创 使用匿名函数绑定重载信号槽

使用lambda定义匿名函数,在匿名函数中调用槽函数,这种写法在类定义的时候可以不用Q_OBJECT宏,不会生成Qt那些乱七八糟的东西,同时使Qt的信号槽的适用范围更广QObject::connect(ui.pushButton_Open, static_cast<void(QPushButton::*)(bool b)>(&QPushButton::clicked), ...

2020-06-06 19:47:46 331

原创 Jekyll + Github Pages + CSDN迁移脚本 = 自己的云笔记

折腾了几天,将sbdn上的文章转移到gayhub pages上,做个简要笔记,以后sbdn上不再更新,转移到gayhub pages,新地址戳这里,废话不多说,直接开始gayhub部分创建gayhub帐号,然后新建一个名为用户名.github.io的存储库,注意,存储库的名称一定要是这个形式的,否则后期访问处理路径问题是很麻烦的向存储出中添加一个index.html或者README.md...

2020-03-27 11:43:45 11334

原创 Qt的TCP通讯

基本使用使用Qt的进行TCP通讯,主要用到两个类,QTcpServer和QTcpSocket。前者主要用于服务端的监听,相当于原始socket中由socket函数创建的监听socket;后者主要用于读写数据,相当于原始socket中由accept函数返回的连接socket。服务端的大致使用流程如下:创建QTcpServer对象,调用listen函数进行IP和端口号的监听,执行过该函数后,客...

2020-03-23 11:58:30 11656 1

原创 正确解决VS编译Qt遇到无法运行rc.exe问题

今天用vs新建一个qt工程,编译的时候发现无法运行“rc.exe”,习惯性的上网找解决办法,找到的都是把rc.exe复制来复制去的,这是绕开问题,不是解决问题。而且我之前的qt工程不用复制rc.exe也能正常编译,只有新建的不行,所以肯定有其他正确解决问题的方法,最简单的就是比较两个工程的配置,看有什么区别。打开工程属性,看下面的截图能正常编译的旧工程中的目标平台版本是8.1,而新建的工程默...

2020-03-19 11:59:23 12866 4

原创 深扒QProcess

临近年关,春节前的一周时间都没什么事,每天上班光明正大的摸鱼。但一周都没事做也不免有些无聊。为了打发无聊的时间,翻出我珍藏多年的移动硬盘,在硬盘的某个快被遗忘的角落,翻出了一个我多年以前刚开始学C语言时在网上淘到的一个双管道后门程序。这个后门程序当时我是看不懂的,随手丢在了角落吃灰,这么多年过去了,我觉得我应该能看得懂了,就翻出来研究一下。其大致原理是这样的:先在本地起一个监听socket,然后...

2020-01-20 12:24:50 11922

原创 康威生命游戏

简介看这里为保证通用性,逻辑层使用C语言的标准库去做#ifndef __H__CELLULAR_AUTOMATA__#define __H__CELLULAR_AUTOMATA__#ifdef __cplusplusextern "C" {#endif // __cplusplus int startGame(int grid, unsigned int seed, int init...

2020-01-18 15:28:11 11499

原创 机器学习调包侠:自己动手实现k最近邻算法

本篇对应教程油管原版,B站搬运k最近邻算法虽说本系列以调包为主,不过也不妨碍找个最简单的算法实现一下找找感觉最近邻指的是,测试数据进来后,找到和其最近的一个训练数据,并将其判定为是该训练数据的同类。如果遇到测试数据与两个训练数据的距离都相等,且这两个训练数据分属于两个类的情况,怎么判定测试数据的种类呢?一种方法就是给该测试数据随机指定一个类型,另一种做法则是按距离由近至远多选几个训练数据,...

2019-12-27 17:56:04 11389

原创 机器学习调包侠:sklearn测试数据切分和计算分类结果准确率

本篇对应教程油管原版,B站搬运。这期视频简单介绍了一些分类器学习算法的原理,如果我们需要对坐标系上的点进行分类,那么首先需要创建一条随机的直线,该直线的两侧就是分类的结果。如果训练数据中某个点的落在了直线的另一侧,那么就调整直线的参数从而使直线能够正确划分所有点的,最后的这条直线就是分类器了,测试数据进来后直接根据点在直线的哪一侧来确定点的所属分类,大致就是这么个意思。视频中介绍的神经网络的演示...

2019-12-27 15:16:23 12006

原创 机器学习调包侠:创建符合正态分布的测试数据

本篇对应教程油管原版,B站搬运。原版教程其实是介绍特征的好坏的,但是我觉得这个看一遍就懂了,没什么值得做笔记的,倒是视频中创建正态分布测试数据的例子值得记录一下代码import numpy as npimport matplotlib.pyplot as plt# 定义样本数量,两种各500,共1000greyhounds = 500labs = 500# np.random....

2019-12-27 14:18:03 11391

原创 机器学习调包侠:可视化决策树

本篇对应教程油管原版,B站搬运测试数据本节课要生成一个可视化的决策树,不能再用上一节那个简单的例子了,本节课我们使用机器学习领域中一个很经典的数据——鸢尾属植物数据集(Iris flower data set),该数据集的相关介绍戳这里。scikit-learn的数据集Iris flower data set作为一个经典数据集,scikit-learn中已经集成了,不需要我们自己去创建,...

2019-12-26 18:41:02 11497

原创 机器学习调包侠:6行代码实现分类器

先做一个简短的说明同样是一个学习笔记系列,只是记录一些个人学习过程中觉得值得记录一下的东西,不会做特别详细的说明。另外,看系列名字就知道,本系列只介绍现有的框架的用法,不涉及具体算法,并不适合想深入学习的同学,如果你只是想用别人写好的算法框架来实现一些有意思的想法,那么不妨来试试看。环境搭建本例主要使用scikit-learn,官网戳这里,中文文档戳这里,具体安装步骤这里就不废话了,文档上都...

2019-12-26 16:50:38 11609

原创 深入理解指针:一文让你彻底理解指针

好多人都说指针很难,其实指针并不难,你不是不懂指针,你是不懂内存管理,搞懂内存管理,指针就是纸老虎

2019-12-06 13:56:44 14586 1

原创 Qt的拖放功能

对于源控件,需要重写鼠标按下事件和鼠标移动事件class TweenMouldListWidget : public QListWidget{ Q_OBJECTpublic: TweenMouldListWidget(QWidget *parent = Q_NULLPTR); ~TweenMouldListWidget();protected: virtual void mou...

2019-12-03 18:21:31 11319

原创 Qt槽函数的重入问题

在Qt的信号槽机制中,如果一个槽函数的执行时间很长,在槽函数还没有执行结束的时候,有新的信号产生,默认情况下,该次信号不会被丢弃,而是会等槽函数执行结束后再次调用槽函数但是在某些情况下,如果想将槽函数执行过程中所产生的新信号丢弃掉,有以下两种方法:blockSignals和disconnect假设有如下信号槽connect(m_play, &QShortcut::activated,...

2019-11-29 18:14:36 12917

原创 Qt的延时函数

阻塞延时使用QThread类的msleep、sleep、usleep函数优点:使用简单,都是静态函数,引入头文件后可以直接调用精确度高,可以精确到微秒缺点这几个函数的作用是强制当前线程休眠,非ui线程倒是无所谓,如果是ui线程,界面会卡死非阻塞延时利用Qt的事件循环结合while循环,方法如下QTime timer = QTime::currentTime().addMS...

2019-11-29 17:57:04 15080

原创 Qt的操作堆栈

用Qt做操作堆栈主要用到这么几个类QUndoCommand、QUndoStack、QUndoGroup和QUndoView,下面详细介绍QUndoCommand该类就是堆栈中的操作元,我们在用的时候需要创建该类的子类,重写该类的一些方法,并将操作的具体实现放到继承的子类中,通常需要重写redo、undo、mergeWith、id等方法redo该方法是操作的具体实现,也就是做和重做时所调用的...

2019-11-22 18:00:09 13773

原创 Qt程序打包

如果直接把编译好的Qt程序拿到未安装Qt运行库的机器上无法直接运行,通常需要将Qt的依赖运行库一起进行打包发布手动复制动态库文件进行打包很麻烦,好在Qt提供了一个自动打包工具,可以将所需要的文件自动复制到程序所在目录首先打开Qt的控制台,然后切换到发布程序的目录,执行命令windeployqt 应用程序名命令执行完毕后就会将所有的依赖文件都拷贝到该目录下,直接将该目录打包发布即可...

2019-11-11 10:18:57 11350

原创 VS常用正则替换

匹配整体替换查找:.*替换:$1栗子:将"str"替换为tr(“str”)搜索:".*"替换:tr("$1")匹配通用部分替换查找:([^"])替换:$1栗子:将u8"str"替换为tr(“str”)查找:u8"([^"])"替换:tr("$1")...

2019-09-26 10:07:39 11666

原创 OpenGL学习笔记:几何着色器

之前还有一节介绍高级数据处理的,和这节的几何着色器都很好理解,没啥可总结的,直接上例子代码#include <glad/glad.h>#include <GLFW/glfw3.h>#include <stb_image.h>#include <glm/glm.hpp>#include <glm/gtc/matrix_transfo...

2019-09-19 14:46:39 11433

原创 OpenGL学习笔记:立方体贴图

这一节很好理解,不需要多做说明,下面的例子程序的顶点数据和原版例子略有不同,注意法线向量#include <glad/glad.h>#include <GLFW/glfw3.h>#include <stb_image.h>#include <glm/glm.hpp>#include <glm/gtc/matrix_transfor...

2019-09-18 14:01:21 11549

原创 OpenGL学习笔记:帧缓冲

这节课很好理解,需要注意的是,在向自定义的帧缓冲中写如像素数据的时候,数据会被写入到帧缓冲的纹理附件中。在本节课的示例程序中,首先向帧缓冲的纹理附件写入地板,箱子的图像数据,然后通过读取帧缓冲的纹理附件的数据,写入到默认缓冲的着色器中,并在着色器中进行颜色修改,以达到各种效果,相当于是加了一个滤镜#include <glad/glad.h>#include <GLFW/gl...

2019-09-17 17:37:53 11360

原创 OpenGL学习笔记:面剔除

本节的内容是在定义顶点的时候确定三角形顶点的顺序,然后根据顺序确定物体的正面和背面,在渲染的时候就可以删除被挡住的一面从而提高绘图效率本例中和原教程略有不同的是,由于懒得重写代码,将上节的混合内容删除,留下了地板和两个箱子,如果直接使用面剔除,由于地板和箱子的正面和背面不同,所以要在渲染循环中,每次绘制之前,改变剔除面的行为,从而不影响画面显示#include <glad/glad.h&...

2019-09-16 16:35:32 11325

原创 OpenGL学习笔记:混合

丢弃片段第一种混合的方法很简单,直接将alpha值为0的片段丢弃即可,这个可以在片段着色器中进行简单处理,需要注意的是,当采样纹理的边缘的时候,OpenGL会对边缘的值和纹理下一个重复的值进行插值(因为我们将它的环绕方式设置为了GL_REPEAT。这通常是没问题的,但是由于我们使用了透明值,纹理图像的顶部将会与底部边缘的纯色值进行插值。这样的结果是一个半透明的有色边框,你可能会看见它环绕着你的纹...

2019-09-16 16:06:05 11388

原创 OpenGL学习笔记:模版测试

模版测试的作用就是给我们提供一种可以控制片段绘制的方法,让我们的绘图更为灵活。本节中绘制边框的例子的设计思想也很容易理解,具体可以看下面代码的中文注释。原版教程中有这么一句话:“我们将模板函数设置为GL_NOTEQUAL,它会保证我们只绘制箱子上模板值不为1的部分,即只绘制箱子在之前绘制的箱子之外的部分。注意我们也禁用了深度测试,让放大的箱子,即边框,不会被地板所覆盖。”他的想法我理解,可为什...

2019-09-11 19:40:39 11327

原创 OpenGL学习笔记:深度缓冲

之前为了方便理解,代码尽量不封装。这节以后,凡是涉及到新东西的尽量不去封装,而不涉及新东西的,为了代码的简洁,尽量去封装了深度缓冲我们观察空间中的两个物体,后面的物体被前面的物体挡住,我们是看不到被挡住的部分的,而深度缓冲可以简单理解为就是标识这个“前后”的值。缓冲测试OpenGL是一个3D世界,但显示设备通常是2D的。前面介绍过,要将一个3D图像转换为屏幕的2D图像,需要经过裁剪。在裁剪...

2019-09-09 17:52:48 11668

原创 Python合并多个Excel文件

import osimport xlrdimport xlwt# 文件所在目录rootdir = "."list = os.listdir(rootdir) # 创建输出文件book=xlwt.Workbook(encoding="utf-8",style_compression=0)sheet = book.add_sheet('test01')# 输出文件行索引outr...

2019-09-06 12:07:21 11716

原创 OpenGL学习笔记:加载模型

加载模型需要使用Assimp来屏蔽掉不同工具的模型文件,Assimp的gayhub简单说一下,不同的3D编辑工具生成的模型文件格式是不同的,Assimp的作用就是将不同的模型文件转换成相同的格式,然后OpenGL再将Assimp的格式转换成OpenGL的数据格式。Assimp是怎么转换其他模型格式的我们不需要关心,但是我们需要关心转换后的统一的数据格式,因为我们需要将这个格式转换到OpenGL中...

2019-09-06 10:13:16 11474

原创 OpenGL学习笔记:多个光源

这一节没有新东西,都是对之前光源进行一个综合应用,着色器代码中增加的函数和数组的使用方法#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>#include <windows.h>#define STB_IMAGE_IMPLEMENTATION#include...

2019-09-05 11:34:59 11660

原创 OpenGL学习笔记:投光物

平行光这部分好理解,只贴出着色器代码,注意:这里删除了灯源位置,添加了无限远光源的方向#version 330 core// 定义材质结构体struct Material {// vec3 ambient; // 移除了环境光材质颜色向量,因为环境光颜色在几乎所有情况下都等于漫反射颜色,所以我们不需要将它们分开储存 sampler2D diffuse; // 将之前定义的...

2019-09-04 17:54:19 11662

原创 OpenGL学习笔记:光照贴图

漫反射贴图简单说就是在上一节的基础上给物体添加上纹理,主要做两件事,将之前定义的vec3漫反射颜色向量替换为漫反射贴图,删除环境光源这里就不贴完整例子了,简单说一下着色器的主要修改,添加纹理的部分就不贴了,详见前面纹理部分的章节,记得更新顶点着色器的数据,将纹理添加进去#version 330 core// 定义材质结构体struct Material {// vec3 ambi...

2019-09-02 19:03:08 11469

原创 英文版vs显示中文乱码

首先要确保文件的编码正确,编码没问题还是无法显示中文,可以尝试一下这个方法

2019-08-27 10:05:20 11850

原创 OpenGL学习笔记:矩阵变换

缩放前面说了一大堆的理论,现在终于可以来点实际应用了对一个向量进行缩放(Scaling)就是对向量的长度进行缩放,而保持它的方向不变。我们先来尝试缩放向量v⃗=(3,2)\vec{v} =(3,2)v=(3,2)。我们可以把向量沿着x轴缩放0.5,使它的宽度缩小为原来的二分之一;我们将沿着y轴把向量的高度缩放为原来的两倍。我们看看把向量缩放(0.5, 2)倍所获得的s⃗\vec{s}s是什么...

2019-08-23 20:42:31 11911

空空如也

空空如也

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

TA关注的人

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