huixieqingchun
硕士毕业于通信与信息系统方向;硕士期间,在导师的带领下参加了973和863国家重大专项课题的研发,物联网协同创新中心国家重点实验室成员,曾在校担任助教。毕业至今一直在互联网公司从事系统研发工作,积累了比较丰富的经验。目前一直在前进的路上......
展开
-
C++跨语言开发项目之SketchUp中乱码错误提示信息的排查和解决方法(收藏)
总第99篇本文主要总结一个在C++项目跨语言开发过程中遇到的一个乱码错误提示信息,将其转码成中文并提供解决方法,以供后来者参考与学习。1.问题的产生最近的工作是为SketchUp开发C++扩展插件, 插件的功能用C++语言实现并制作成.so文件。在VS2019中,项目生成后配置调试参数及调试命令,按F5运行时即可启动SketchUp进行联合调试。今天在调试一个.so文件时,SketchUp中的Ru...原创 2021-06-22 15:33:53 · 408 阅读 · 0 评论 -
C++中的RAII技术及典型应用
总第106篇本篇主要对C++中的RAII机制进行一个全面的梳理和总结,以便日后项目中参考。 1.什么是RAIIRAII是Resource Acquisition Is Initialization的简称,其翻译过来就是“资源获取即初始化”,即在构造函数中申请分配资源,在析构函数中释放资源,它是C++语言中的一种管理资源、避免泄漏的良好方法。 C++语言的机制保证了,当创建一个类对象时,会自动调用构...原创 2021-07-13 18:58:11 · 401 阅读 · 0 评论 -
C++程序的发布部署方式及缺失依赖库dll的解决方法(收藏)
总第103篇本篇接上篇,主要对Windows平台上C++项目开发过程中库目录进行梳理及程序发布要注意的相关事项进行总结,希望对其他开发者有一定的借鉴意义。1.问题的提出在最近的项目中,主要工作是为SketcchUp平台开发基于Ruby的扩展功能库,这种库文件是以.so为后缀的形式提供,用C++语言来编写实现。当我在自己的电脑环境下测试成功无问题后,进行发布时,就需要打包自己电脑上的相关依赖dll文...原创 2021-06-25 17:53:40 · 1188 阅读 · 0 评论 -
C++11中std::thread的使用
总第105篇本篇主要对C++11中的线程std::thread作全面的梳理和总结,方便以后在工作中参考和使用。 1.std::thread介绍及示例首先说明一下,对于以前的编译器, 若要使用C++11的特性,编译时要设定参数如下:-std=c++11 这里先写一个简单的线程示例程序。#include <iostream>#include <thread>#includ...原创 2021-07-13 15:29:25 · 525 阅读 · 0 评论 -
C++开发者都应该熟练使用的八个C++11特性
总第98篇对于C++开发者来说,C++11为我们带来了大量新的特性,修复了大量的缺陷并降低了代码的拖沓,大大提升了语言内核的基础效率 ,使得其变成一种更易使用的语言,可以让我们更快地写出代码。本篇就来总结一下,作为开发者必须掌握并使用的八个特性。1.auto 在以前,auto关键字用来指定变量的存储期,在C++11中,它的功能变为类型推导。 auto在代码中成为一个类型占位符,通知编译器去根据初始...原创 2021-06-09 23:21:07 · 174 阅读 · 0 评论 -
C++11中std::function与std::bind的使用
总第101篇本文主要全面梳理总结一下C++11中的std::function的用法,以方便其他伙伴们参考与学习。 1.std::function std::function是一组函数对象包装类的模板,其实例可以对普通函数、lambda表达式、函数指针、类的成员函数及其它函数对象等进行存储、复制和调用操作,它实质上是实现了一个泛型的回调机制。std::function不管其实例类型是什么样的,其调用...原创 2021-06-17 23:39:21 · 344 阅读 · 1 评论 -
C++中STL在使用过程中的几点深入总结(收藏)
总第97篇对于C++填坑员来说,相信大家肯定使用过STL,只是理解的深与浅罢了。最近在项目开发过程中,发现自己对STL中的有些问题有了更深入的认识,或者说有些知识以前没有掌握,在接下来的几篇文章中,好好总结梳理一下,以便加深印象。1.容器容器是用于存放数据的类模板,在使用容器时,即是将容器类模板进行实例化,对象的变量被插入容器中时,实际插入的是对象的一个复制品。在STL中许多算法(函数模板),在执...原创 2021-06-06 23:31:57 · 224 阅读 · 1 评论 -
Qt Creator中编译运行Qt项目时报“程序异常结束”错误的解决思路
总第91篇本篇主要总结自己在项目开发过程中遇到的一个棘手问题,记录下自己曾经踩过的坑,方便自己以后查阅,也方便项目开发的同路人参考与借鉴。1.问题的产生在大多数时候,我们是用Visual Studio集成开发环境来开发项目的,这个集成开发环境功能集全,方便调试,但是它庞大,对于有些小项目完全可以用其它轻量级的代替。这不,前不久我就用Qt Creator开发了一个小项目,在写代码的过程中都是很顺利的...原创 2021-02-27 14:26:17 · 2217 阅读 · 0 评论 -
C++跨语言开发项目之SketchUp加载so报错的解决方法及思路
总第102篇本篇文章接 第99篇文章 内容所做的项目继续梳理记录下自己所填过的坑,希望这些填坑经验对同是开发者的你有一定的借鉴和参考意义。欢迎关注交流,一起学习,一起进步。1.问题的产生在第99篇文章中,我已经详细阐述了LoadError:126这种错误的详细解决方法。项目开发过程中,在我自己的电脑上调试通过后,就涉及到.so发布的问题。当我将项目生成的.so以及相关的.dll文件打包发给其它同事...原创 2021-06-22 15:36:36 · 330 阅读 · 0 评论 -
Visual Studio中MD与MT的区别及运行库类型选择
总第95篇本篇主要总结一下自己在项目开发过程中经常遇到的一个问题,即Visual Studio编译过程中如何选择运行库的类型。希望对其它开发的伙伴们有一定的参考价值和帮助。 1.在Visual Studio中设置在Visual Studio 2019中,右键项目名称,打开项目属性页,选择“配置属性”->“C/C++”->“代码生成”->“运行库”即可对运行库类型进行设置,如下图所...原创 2021-05-26 18:36:15 · 1178 阅读 · 0 评论 -
C++跨语言开发项目中乱码错误提示信息的排查和解决方法(收藏)
总第99篇本文主要总结一个在C++项目跨语言开发过程中遇到的一个乱码错误提示信息,将其转码成中文并提供解决方法,以供后来者参考与学习。1.问题的产生最近的工作是为SketchUp开发C++扩展插件, 插件的功能用C++语言实现并制作成.so文件。在VS2019中,项目生成后配置调试参数及调试命令,按F5运行时即可启动SketchUp进行联合调试。今天在调试一个.so文件时,SketchUp中的Ru...原创 2021-06-16 15:35:25 · 312 阅读 · 0 评论 -
C++项目中修改Dll加载顺序的方法及Dll版本不正确的解决思路(精华)
总第104篇本篇将继续梳理总结在最近的项目开发过程中遇到的一个有关dll的问题,希望对大家今后的项目开发有足够的借鉴和参照意义。1.问题的产生在前面的 第102篇文章 中,在发布自己开发的.so文件并在目标机上测试时,我们遇到了193类型的问题,这是当中有些所依赖的dll不正确,32位版本与64位版本不对应、不匹配。最让人受不了的是,同样的.so文件和依赖库,我在目标机上测试时,在其中一台目标机的...原创 2021-06-29 17:48:56 · 545 阅读 · 0 评论 -
C++项目中,vector作为函数返回值出现的问题及解决方法
总第100篇本文主要总结一下这两天在项目开发过程中遇到的一个问题,调试程序找错误用了很久,最后才发现。希望我的总结为其他后来人有一定的参考借鉴意义。1.问题的产生在我的工程项目中,我定义了这样一个接口函数:std::vector<std::vector<CPoint> >& callBackToRuby_points(const std::vector<std...原创 2021-06-16 16:38:22 · 4845 阅读 · 0 评论 -
VS中编写Qt项目时,提取ts文件出现中文乱码的解决方法(填坑)
总第84篇本篇主要总结一个在开发过程中遇到的问题,方便以后参考,也方便后来者可以避免这个坑。1.问题的产生一般在做C++开发过程中,都会选择使用Visual Studio+Qt AddIn的环境,这样就可以在VS的环境下写Qt项目并灵活地进行调试了。当我们将项目代码写完成后,提取项目中的待翻译文字生成.ts文件时,打开文件可能会发现文件中的中文部分是乱码的。 一般这种乱码文件是通过VS中自带的lu...原创 2020-12-07 22:09:46 · 1075 阅读 · 0 评论 -
Qt项目中,实现屏幕截图功能的模块详细实现(可通用)
总第52篇屏幕截图功能,在很多软件中都有使用。本文主要梳理一下这个功能的实现,方便在以后的项目中快速移植,对于这方面不太熟悉的,也可以参考一下其实现方式。程序的实现效果图,见文章末尾。头文件主要包含两个类,一个是截屏对象类,另一个是截屏窗口类,在截屏窗口中调用截屏对象。其详细的变量、方法定义如下:#ifndef SCREENWIDGET_H#define SCREENWIDGET_H#inc...原创 2020-09-02 16:00:56 · 1454 阅读 · 0 评论 -
商业软件的注册码激活码的实现方法及代码示例(收藏备用)
总第51篇本文主要梳理一下软件注册码的实现方法,并给出简单的实现方式代码,供以后的项目参考,也方便在以后的项目中进一步延伸实现。1.注册码的实现方式目前大部分商业软件在提供注册码时,基本上采用了以下几种机制来实现,当然,这几种方式各有其优劣。远程联网激活。在软件每次启动时,都会联网检查软件使用情况,检查使用时间是否到期,是否是多设备使用等。这种方式控制是非常棒的,动态性、实时性都非常好,但劣势也非...原创 2020-08-31 20:13:31 · 2945 阅读 · 0 评论 -
Qt项目中,实现屏幕截图并生成gif的详细示例(值得细读)
总第50篇平时我们在工作和学习的过程中,有时需要将桌面的某些动作截图生成gif动图,以更生动地呈现出来。目前有很多这样的软件,并且方便易使用,比如我经常使用的GifCam,软件小巧,生成的图片文件也比较小,非常优秀。它的界面如下图所示(这里绝不是打广告呀)。 那么,这种截图后生成gif文件是如何用软件实现的呢?本文将详细说明一下这种功能的实现思路,作为软件设计的一种参考,也方便在以后的工程项目中借...原创 2020-08-22 20:29:41 · 587 阅读 · 0 评论 -
Qt项目中,通用无边框窗口的拉伸与移动设计(可作为库文件调用)
总第49篇在我们的项目开发过程中,为了界面的美观,经常会自定义标题栏、自定义无边框窗体等,这些都会面临一个问题,那就是在定义无边框窗体后,要自己处理窗体的移动、拉伸。若在项目中有多处应用无边框窗体,就有必要将其写成一个类并封装成一个库了。本文梳理了无边框窗体的实现,将其写成一个通用的类,方便在项目的其它地方调用,也方便以后的开发中直接应用,供大家参考和借鉴使用。此类实现的功能包括:可以指定需要无边...原创 2020-08-13 20:51:23 · 298 阅读 · 1 评论 -
用Qt实现类似Win10系统中的日历光晕效果(一种思路)
总第48篇本文主要总结一下在Qt项目中,如何绘制类似Win10系统中的日历光晕效果,并给出绘制代码,方便以后在项目中学习与参考。在Win10系统中,光晕日历的效果如下图所示。 用Qt来绘制这个控件有两个难点,一个是要自己计算当前月份的日期并自动排列成星期,二是绘制这种光晕背景。其中绘制光晕效果要用到QPainter的图像组合模式,通过官方文档,可以看到,QPainter有多种图像组合模式,可通过接...原创 2020-08-12 10:27:49 · 646 阅读 · 0 评论 -
Qt项目中,绘制电子时钟控件的详细示例(值得收藏)
总第45篇本文详细梳理一下在项目开发过程中,用QPainter绘制电子时钟控件的方法,并给出实例代码,以供后面的项目中参考学习。 绘制电子时钟控件,无非是绘制仪表的边框和相应的刻度,并在时间更新时重画即可。如下图示的电子时钟,我们在绘制时,可分为绘制边框、绘制背景、绘制刻度线、绘制数字、绘制时分秒指针等,一步步绘制即可。不多说,直接上详细代码。其头文件widget.h如下所示。#ifndef WI...原创 2020-08-05 17:28:51 · 383 阅读 · 0 评论 -
Qt开发音乐播放器时,频谱显示控件的详细绘制(好思路)
总第46篇本文详细梳理了在Qt框架制作音乐播放器的过程中,频谱显示的绘制过程。在开发音乐播放器的时候,需要将音频数据转换成对应的频谱显示,我们可以采用fmod 第三方库来处理,即通过fomd获取音频数据对应的频谱数据,再在项目中对数据进行绘制即可,这样使工程高度解耦,利于修改和维护。fmod声音系统是为了游戏开发者准备的革命性音频引擎,功能非常强大,具体使用方法可以参考官网。 在下面的代码类中,不...原创 2020-08-10 19:35:26 · 2527 阅读 · 3 评论 -
Qt项目开发中,将数据导出到Excel的方法详细梳理与代码示例
总第43篇本文主要总结梳理了在Qt项目中,将表格里的数据导出到Excel文件中的实现方式,方便自己和其它伙伴在以后的项目上过程中参考。1.一种简单粗暴的方法这种方法是在进程中打开一个文件保存对话框,读取软件表格中的内容,将其文字直接保存到Excel中。其具体的实现代码如下:QString filepath = QFileDialog::getSaveFileName(this, tr("Save ...原创 2020-07-22 21:57:52 · 1807 阅读 · 0 评论 -
Qt项目开发中,信息数据导出到Excel的通用接口类的实现
总第44篇本文接第43篇,将Qt系统中的数据信息导出到Excel文件,将这项功能写成一个单独的类,方便在以后的工程项目中直接调用。也希望给大家带来一定的参考意义。 在上篇文章中,已经说明要使用QAxObject类,因此在项目的.pro文件中添加CONFIG += qaxcontainer。在类的头文件中直接添加#include <QAxObject>即可。下面示例整个类的代码,包含头文...原创 2020-07-22 21:55:59 · 263 阅读 · 0 评论 -
Qt项目中,用QPainter进行绘制图形时,边角显示不完整问题的梳理
总第42篇 本文主要梳理总结了我自己在项目开发过程中经常遇到的一个问题,就是用QPainter进行图形绘制时,边角显示不完整的现象。这个问题虽然比较简单,但是很容易忘记,每次绘图时都要调试一下,故总结于此,方便以后查阅,也方便同行伙伴参考。 1.Painter绘制 我们知道,QPainter简直是王者,任何图形都可以由它绘制出来。 ...原创 2020-07-15 08:32:50 · 1176 阅读 · 0 评论 -
Qt开发中的几点关键经验及类的元对象反射问题,值得收藏参考
总第41篇 本文主要总结了用Qt框架做项目开发的过程中,类的元对象MetaObject 相关的几个核心知识点,收录于此,以供大家参考,也方便于自己在工作过中可以快速温习回看。 1.元对象系统与反射 反射是指程序在运行时可以访问、检测和修改其自身状态或行为的一种能力,它和内省(type introspection)不是同的。内省机制 仅...原创 2020-07-06 13:16:33 · 661 阅读 · 0 评论 -
Qt项目中,三种图形渐变填充方式详细总结
总第40篇 本文主要详细梳理了Qt项目开发过程中,对图形的三种渐变填充方式,以便后面参考。 在Qt中,目前支持三种渐变填充方式,这三种方式都是QGradient的子类,它可以与画刷 QBrush组合使用,来指定特定对象图形的填充方式。这三种填充方式是: QLinearGradient:显示从起点到终点的直线渐变; ...原创 2020-07-05 06:41:31 · 1818 阅读 · 0 评论 -
Qt项目中,绘制只有两个圆角的矩形及QPainterPath类的应用
总第39篇 本文主要梳理总结了在Qt项目开发过程中,某些特殊场合绘制只有两个圆角矩形的方法,并在此基础上详细介绍了类QPainterPath的用法。 1.两个圆角矩形的绘制方法 在Qt项目中,绘制只有两个圆角的矩形,可以使用QPainterPath合并addRoundedRect和addRect的path形成目标path,再使用pa...原创 2020-07-05 03:23:14 · 1757 阅读 · 0 评论 -
STL深度梳理之常用算法实现及lambda表达式(C++11/14)
总第38篇 本文要主梳理STL中Lambda表达式的定制操作及常用的基本算法的实现方式。 1.Lambda表达式的定制 很多算法都会比较输入序列中的元素以达到排序的效果。通过定制比较的动作,就可以主算法按编程者的意图去工作 。这里我们以排序算法来说明。 普通的排序算法只能按照从小到大进行排序,很多时候并不适用。其普通排序算法...原创 2020-06-01 11:17:19 · 259 阅读 · 0 评论 -
STL深度梳理之模板编程与迭代器(C++11/14)
总第37篇 接下来的几篇文章将在C++11/14的基础上,重新对STL标准库的知识进行梳理学习,在自己精进的同时,也希望能给前进路上的你提供一定的参考。 STL是C++标准库的一个重要组成部分,它实现了数据结构和算法,主要由算法、容器、迭代器、适配器、函数对象、空间适配器六大部件组成。 其中迭代器是对指针的一种泛化,是容器与算法的桥梁;适配器...原创 2020-06-01 08:48:04 · 176 阅读 · 0 评论 -
C++新特性之七:标准库中对其它项的扩充
总第36篇 本文是C++新特性系列最后一篇,主要梳理了C++11/14标准库对其它项的扩充,希望对大家的学习和工作有一定的参考价值。 1.long long int类型 这个类型其实在C99中就已经纳入了C标准中,大部分编译器已经支持。C++11的工作则是正式把它纳入标准库,规定了一个long long int类型至少具备64位的比...原创 2020-05-02 08:16:21 · 130 阅读 · 0 评论 -
C++新特性之六:标准库中对语言级线程支持的扩充
总第35篇 本文主要梳理C++11/14标准库中对语言级线程支持的扩充,以便大家在学习和工作过程中能快速参考。 1.std::thread std::thread用于创建一个可执行的线程实例,因此,它是一切并发编程的基础,使用时需要包含头文件,它提供了很多基本的线程操作,例如get_id()可获取所创建线程的ID,join()用来加...原创 2020-05-02 07:33:30 · 121 阅读 · 0 评论 -
C++新特性之五:标准库中的正则表达式扩充
总第34篇 本文主要对C++11/14标准库中的正则表达式的扩充进行详细总结说明,以方便大家在学习工作过程中参考。 1.正则表达式 正则表达式是描述一种字符串匹配的模式。一般使用正则表达式主要实现下面三个需求: a:检查一个串是否包含某种形式的子串;b:将匹配的子串替换;c:从某个串取出符合条件的子串; 正则表达式是...原创 2020-05-02 02:29:33 · 155 阅读 · 0 评论 -
C++新特性之四:标准库中的智能指针和引用计数
总第33篇 本文主要介绍C++11/14在标准库中对智能指针和引用计数的扩充,以供大家学习和工作的过程中参考。 1.引用计数 引用计数是为了防止内存泄漏而产生的,其基本理念是:对于动态分配的对象进行引用计数,当增加一次对同一个对象的引用时,计数加1,当删除一次引用时,计数减1,当一个对象的引用计数减为0时,就自动删除指向的堆内存。 ...原创 2020-04-30 09:30:10 · 252 阅读 · 0 评论 -
C++新特性之三:标准库中的新增容器
总第32篇 本文主要对C++11/14中标准库新增容器的特性进行详细说明,方便大家学习参考。 1.std::array 为什么要引入这个容器呢?主要有两点原因: A. std::vector太强大了,存储在堆内存中,而std::array存储在栈内存中,访问更加灵活,可以获得更高的性能;B. 使用std::array能够让代...原创 2020-04-30 05:58:43 · 131 阅读 · 0 评论 -
C++新特性之二:对语言运行期的强化
总第31篇 本文主要详细介绍C++11/14中对语言运行期强化的一些新特性。方便大家在学习工作过程中参考,对于文中疏漏部分,也欢迎大家批评指正。 1.Lambda表达式 匿名函数可以说是现代编程语言的标配,C++11中提供的lambda表达式,实际上类似匿名函数的特性,其表达式的语法如下: [...原创 2020-04-30 03:10:00 · 173 阅读 · 0 评论 -
C++新特性之一:对语言可用性的增强(下篇)
总第30篇 接上篇,本文继续对C++新特性中的对语言可用性的增强进行归纳介绍。 1.面向对象增强 委托构造 C++11中引入了委托构造的概念,这使得构造函数可以在同一个类中,一个构造函数可以调用另一个构造函数,从而达到简化代码的目的。下面是一个例子: ...原创 2020-04-23 09:23:24 · 93 阅读 · 0 评论 -
C++新特性之一:对语言可用性的增强(中篇)
总第29篇 接上篇,本文继续对C++新特性中的对语言可用性的增强进行归纳介绍。 1.区间迭代的简化 区间迭代是指基于范围的for循环。在C++11中,引入了基于范围的迭代写法,能够写出像python一样简单的循语句: int array[] = {1,2,3,4,5};for(auto &am...原创 2020-04-23 08:25:18 · 117 阅读 · 0 评论 -
C++新特性之一:对语言可用性的增强(上篇)
总第28篇 在接下来的几篇文章中,我将系统介绍并总结C++11/14中的一些新特性,供大家学习参考。对于C++17/20中有少许的新特性,目前还太前沿,一般在开发过程中还用不到,用到了再介绍学习。欢迎大家学习批评指正。 1.nullptr nullptr的出现是为了替代NULL,在传统C++中会将NULL、0视为同一种东西,这取决于...原创 2020-04-21 14:42:28 · 102 阅读 · 0 评论 -
Qt项目中setMask()函数的使用及制作圆形头像的方法
总第27篇 在Qt项目开发过程中,某些特定的场合下需要制作非规则的图形显示,这时我们就要用到图形遮罩功能,系统库提供了setMask()接口,但是很多人看着不太明白。本文将详细说明此接口的应用,并用代码实现比较常见的圆形图像的制作。 1.接口说明及应用 Qt中针对窗口部件遮罩功能提供的setMask()函数, 主要有两种形式: ...原创 2020-04-16 03:38:05 · 3315 阅读 · 0 评论 -
C++中的两种特殊运算符的含义
总第26篇 本文主要梳理总结一下C++中两种特殊的运算符.*和->*的含义与使用 ,方便大家在以后的项目开发过程中参考。 1.概念引入 在C++中,除了我们在C语言中熟知的普通指针外,还有一类指针就是类成员的指针。而指向类成员的指针又分为两类: 指向类的数据成员的指针。一般用来表示类的某个成员相对于类的基址...原创 2020-04-08 14:08:31 · 639 阅读 · 0 评论