<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sinan1995的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sinan1995</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinan1995]]></copyright><item><title><![CDATA[对printf函数进行封装，实现一个简单清晰的日志打印]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/116233479</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/116233479</guid><author>sinan1995</author><pubDate>Wed, 28 Apr 2021 15:07:44 +0800</pubDate><description><![CDATA[对printf函数进行封装，实现一个简单清晰的日志打印前言一、需要哪些打印信息？二、实现步骤1.需要的头文件2.函数的封装3.扩展结语


前言
提示：日常调试中很多情况下会用到调试打印，如何快速便捷的查看打印的信息是我们关注的。

一、需要哪些打印信息？
在调试的过程中哪些信息能快速的帮助我们定位到我们想要查看的位置，一般情况下有这么一些：时间，文件名，函数名，行号等。有了这些信息，我们便能够快速的定位到对应的位置，然后去修复对应的bug。
二、实现步骤
1.需要的头文件
头文件如下：
#include ]]></description><category></category></item><item><title><![CDATA[将数据的指定位置置位]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/116233325</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/116233325</guid><author>sinan1995</author><pubDate>Wed, 28 Apr 2021 14:39:46 +0800</pubDate><description><![CDATA[将数据的指定位置置位引言实现过程如何实现数组形式的数据的置位函数的封装扩展结语
引言
在C语言的编程下，我们会经常遇到将数据的某一位置为0或者1的情况，在常用数据（char、int、long）的情况下比较简单，按位与或者按位或就可以进行将某位置1与置0了。但是如果数据是128位的或者256位的，例如：unsigned char[32]，在这样的情况下就比较麻烦了。
实现过程
如何实现数组形式的数据的置位
在我们不知道数据具体的长度的时候，我们可以想到将数据统一转换成unsigned char *的形式，这样]]></description><category></category></item><item><title><![CDATA[QT设置进度条的样式表-QProgressBar]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/107998277</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/107998277</guid><author>sinan1995</author><pubDate>Fri, 14 Aug 2020 10:03:41 +0800</pubDate><description><![CDATA[QT设置进度条的样式表-QProgressBar
QProgressBar{
	font:9pt;
	border-radius:5px;
	text-align:center;
	border:1px solid #E8EDF2;
	background-color: rgb(255, 255, 255);
	border-color: rgb(180, 180, 180);
}
QProgressBar:chunk{
	border-radius:5px;
	background-color:#1ABC]]></description><category></category></item><item><title><![CDATA[Qt下载Url文件]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/107689355</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/107689355</guid><author>sinan1995</author><pubDate>Thu, 30 Jul 2020 14:24:41 +0800</pubDate><description><![CDATA[加入网络模块

在pro文件中加入：QT += network

添加头文件

需要依赖写文件以及网络的头文件：

#include &lt;QFile&gt;
#include &lt;QUrl&gt;  
#include &lt;QNetworkReply&gt;
#include &lt;QNetworkRequest&gt;
#include &lt;QNetworkAccessManager&gt;
#include &lt;QEventLoop&gt;
#include &lt;QTimer&]]></description><category></category></item><item><title><![CDATA[Qt调用Windows下的资源管理器打开指定目录]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/107509814</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/107509814</guid><author>sinan1995</author><pubDate>Wed, 22 Jul 2020 11:50:05 +0800</pubDate><description><![CDATA[需要包含头文件
#include &lt;QProcess&gt;
#include &lt;QDir&gt;

调用代码

下面代码是在资源管理器中打开当前执行程序的路径

QProcess process;
process.start(QString("explorer /select, %1").arg(QDir::toNativeSeparators(qApp-&gt;applicationDirPath())));
process.waitForFinished();


...]]></description><category></category></item><item><title><![CDATA[交叉编译工具链介绍]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/107100789</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/107100789</guid><author>sinan1995</author><pubDate>Fri, 03 Jul 2020 10:41:35 +0800</pubDate><description><![CDATA[基本概念
什么是交叉编译

交叉编译可以理解为，在当前编译平台下，编译出来的程序能运行在体系结构不同的另一种目标平台上，但是编译平台本身却不能运行该程序。
比如，我们在 x86 平台上，编写程序并编译成能运行在 ARM 平台的程序，编译得到的程序在 x86 平台上是不能运行的，必须放到 ARM 平台上才能运行。
交叉编译链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。同时，它隐藏了预处理、编译、汇编、链接等细节，当我们指定了源文件(.c)时，它会自动按照编译流程调用不同的子]]></description><category></category></item><item><title><![CDATA[在QT中使用JS脚本]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/106767422</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/106767422</guid><author>sinan1995</author><pubDate>Mon, 15 Jun 2020 17:28:46 +0800</pubDate><description><![CDATA[配置JS脚本
在.pro文件中加入：QT += script
包含JS需要的头文件
#include &lt;QScriptEngine&gt;
#include &lt;QScriptValue&gt;
#include &lt;QScriptValueList&gt;

需要解析的脚本文档
function transFunc(val)
{
	return val*5;
}

加载JS脚本函数
void parseJS(const QString &amp;text, const QString &am]]></description><category></category></item><item><title><![CDATA[VTD-XML在嵌入式Linux下打开多个文件后会运行崩溃：Error in : free(): invalid pointer:]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/104635573</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/104635573</guid><author>sinan1995</author><pubDate>Tue, 03 Mar 2020 16:54:01 +0800</pubDate><description><![CDATA[问题描述：

最近在优化xml解析工具的时候发现在windows电脑上运行时不会出现问题，当放到嵌入式linux平台下运行时，当第二次打开xml文件时，会崩溃，并且提示Error in : free(): invalid pointer:这样的信息。

思考：

首先第一次运行不会崩溃，在第二次运行的时候崩溃了，在加载新的xml文件的时候，对上一个VTDNav解析的类进行了释放，且同步delet...]]></description><category></category></item><item><title><![CDATA[设计模式专题--观察者模式]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/104635188</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/104635188</guid><author>sinan1995</author><pubDate>Tue, 03 Mar 2020 16:31:52 +0800</pubDate><description><![CDATA[一、前言

  在日常的写代码中，观察者模式是很常见的一种模式，例如：在写入或者拷贝一个比较大的文件的过程中，我们常常需要知道进度是怎么样的。这样我们就希望有一些代码能够去实现这样的功能，观察者模式就诞生了。

二、模式介绍

  观察者模式，主要是由两个类进行实现。

观察者类：主要负责接收被观察者发出的消息。进行相关的数据处理，消息提醒。
	被观察者类：提供观察者的注册、注销、通知观察...]]></description><category></category></item><item><title><![CDATA[设计模式专题--简单工厂、工厂、抽象工厂]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/89306968</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/89306968</guid><author>sinan1995</author><pubDate>Mon, 15 Apr 2019 10:30:53 +0800</pubDate><description><![CDATA[一、前言

简单工厂模式、工厂模式、抽象工厂模式，虽然分为三个设计模式，但是有一些共通的地方，而在学习的时候常常会分不清这三种模式的区别，不知道该怎么去合理的使用这三种模式。本篇文章通过融合对三种模式的具体实现进行分析，来区别开三种设计模式。

二、模式介绍

1、简单工厂模式

简单工厂模式，通过创建一个专门定义的工厂类，来负责创建其他的具体产品的实例。工厂创建的具体的实例是通过传入的参数来进行...]]></description><category></category></item><item><title><![CDATA[PyQt5--google快捷翻译]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/88554608</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/88554608</guid><author>sinan1995</author><pubDate>Thu, 14 Mar 2019 17:01:23 +0800</pubDate><description><![CDATA[一、环境配置

1、在python官网下载windows的python安装包，安装python，记得勾选设置环境变量，否则需要自己去设置。

2、在命令行下输入python，如果有Python的版本号出现，且&amp;gt;&amp;gt;&amp;gt;出现，则说明安装成功，输入exit()退出python命令行模式。

3、安装pip，在命令行下输入：curl https://bootstrap.pypa.io/ge...]]></description><category></category></item><item><title><![CDATA[Git的使用]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/85123454</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/85123454</guid><author>sinan1995</author><pubDate>Thu, 20 Dec 2018 15:26:49 +0800</pubDate><description><![CDATA[最近随着工程代码的增多，所以就开始学习使用版本控制系统。在看了廖雪峰老师的关于Git的使用后，总结了一下Git的使用命令。

]]></description><category></category></item><item><title><![CDATA[Qt--根据圆上的两个点和半径获取圆心]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/84107330</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/84107330</guid><author>sinan1995</author><pubDate>Thu, 15 Nov 2018 17:40:29 +0800</pubDate><description><![CDATA[1.根据圆上的两个点和半径获得两个圆的算法


#define MAXCOM_F(a, b) ((a)-(b)&amp;gt;0.00001) ? true : false


QVector&amp;lt;QRectF&amp;gt; EICWidget::getEllipseCoors(const QPointF &amp;amp;r1, const QPointF &amp;amp;r2, float r)
{
    doubl...]]></description><category></category></item><item><title><![CDATA[QT实现简单的贪吃蛇小游戏]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/81671311</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/81671311</guid><author>sinan1995</author><pubDate>Tue, 14 Aug 2018 17:59:14 +0800</pubDate><description><![CDATA[一、新建一个Qt项目

新建Qt Widgets Application，项目名称为HappySnake，基类选择QWidget，类名默认

二、添加要用到的头文件


#include &amp;lt;QKeyEvent&amp;gt;
#include &amp;lt;QRectF&amp;gt;
#include &amp;lt;QPainter&amp;gt;
#include &amp;lt;QPen&amp;gt;
#include &amp;lt;QBr...]]></description><category></category></item><item><title><![CDATA[Qt--paintEvent绘制雷达扫描图]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/81329274</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/81329274</guid><author>sinan1995</author><pubDate>Wed, 01 Aug 2018 14:09:28 +0800</pubDate><description><![CDATA[新建一个Qt的窗口类，默认命名：


class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    QPixmap paintWidget();

protected:
    void paintEvent(QPaintEvent...]]></description><category></category></item><item><title><![CDATA[C--排序算法：shell排序、快速排序]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/81095582</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/81095582</guid><author>sinan1995</author><pubDate>Wed, 18 Jul 2018 12:00:05 +0800</pubDate><description><![CDATA[ 

1、shell排序

Shell排序是这样来分组并排序的:将序列分成子序列,然后分别对子序列进行排序,最后将子序列组合起来。Shell排序将数组元素分成“虚拟”子序列,每个子序列用插入排序方法进行排序;另一组子序列也是如此选取,然后排序,依此类推。在执行每一次循环时, Shell排序把序列分为互不相连的子序列,并使各个子序列中的元素在整个数组中的间距相同。例如,为方便起见,我们设数组中元素的...]]></description><category></category></item><item><title><![CDATA[C--三种常用的排序方法]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/81095259</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/81095259</guid><author>sinan1995</author><pubDate>Wed, 18 Jul 2018 11:34:25 +0800</pubDate><description><![CDATA[在日常中用到的排序比较多，最熟悉的莫过于冒泡排序了，在这里分析了几种排序所需要的比较次数以及交换次数。

同时提供了参考的代码。

1，分析结果

 
			插入排序
			冒泡排序
			选择排序
		比较次数
			 
			 
			 
		最佳情况
			ñ
			N ^ 2
			N ^ 2
		平均情况
			N ^ 2
			N ^ 2
			N ^ 2
		最差情况
			N ^ ...]]></description><category></category></item><item><title><![CDATA[Qt--paintEvent下对图形进行移动、缩放]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/81002178</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/81002178</guid><author>sinan1995</author><pubDate>Wed, 11 Jul 2018 16:08:58 +0800</pubDate><description><![CDATA[用Qt中的paintEvent绘图，通过坐标系的变换来实现对图像的位置变化，通过滚轮事件对图像的大小进行缩放。具体代码如下：新建Qt Widget应用程序新增头文件：#include &amp;lt;QBrush&amp;gt; #include &amp;lt;QPen&amp;gt; #include &amp;lt;QPainter&amp;gt; #include &amp;lt;QMouseEvent&amp;gt; #include &amp;lt;QDe...]]></description><category></category></item><item><title><![CDATA[打印输出，与++机制]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/81000616</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/81000616</guid><author>sinan1995</author><pubDate>Wed, 11 Jul 2018 15:00:19 +0800</pubDate><description><![CDATA[先看下面的代码，看看输出的值是多少？    int  j = 0 ;      qDebug （）&amp;lt;&amp;lt; j ++;    qDebug （）&amp;lt;&amp;lt; ++ j ;    qDebug （）&amp;lt;&amp;lt; j ++ &amp;lt;&amp;lt; j ;    qDebug （）&amp;lt;&amp;lt; ++ j &amp;lt;&amp;lt; j ;    qDebug （）&amp;lt;&amp;lt; j &amp;lt]]></description><category></category></item><item><title><![CDATA[Qt--使用电脑的摄像头拍摄图片]]></title><link>https://blog.youkuaiyun.com/sinan1995/article/details/80093392</link><guid>https://blog.youkuaiyun.com/sinan1995/article/details/80093392</guid><author>sinan1995</author><pubDate>Thu, 26 Apr 2018 14:34:09 +0800</pubDate><description><![CDATA[搜集了一些网上的资料，写下过程，关于如何使用电脑的摄像头采集图片

创建工程，在.pro文件中要加上下面一些内容：

 


QT       += core gui multimedia multimediawidgets

在.h文件中要加上以下几个头文件：


#include &amp;lt;QCamera&amp;gt;
#include &amp;lt;QCameraViewfinder&amp;gt;
#inclu...]]></description><category></category></item></channel></rss>