
C++/Qt
C++痕迹记录
kestiny
这个作者很懒,什么都没留下…
展开
-
[笔记]转向Modern C++
转向Modern C++优先使用auto推导类型而非显示类型声明auto变量需要在声明时进行初始化 int x1; // 未初始化的int变量,值的不确定的,可能为0,也可能是别的值 auto x2; // 错误,需要初始化 auto x3 = 0; // 完美auto使变量的声明变得简单,甚至仅仅被编译器知道的类型 aut...原创 2019-07-14 22:14:15 · 246 阅读 · 0 评论 -
[笔记]Modern CMake 3:基本介绍
Modern CMake 3:基本介绍组织项目结构CMake没有统一的项目结构,一些常用原则可以帮助我们组织更好的项目结构:项目内部能够十分方便的读取其他工程;避免项目结构冲突;并行构建.一个典型的例子(仅做参考),假设你的项目叫做project,你的库名为lib,可执行程序名为app:- project - .gitignore - README.md - LICE...原创 2019-06-08 21:02:15 · 852 阅读 · 0 评论 -
[笔记]Lambda 表达式
Lambda 表达式Lambda表达式是C++中的语法糖。形式一般Lambda表达式形如:[capture](parameters)->return-type{body}如果没有参数,空的()可以省略。返回值也可以省略。举例:std::sort(x, y, [](float a, float b){return std::abs(a) < std::abs(b);});...原创 2019-07-22 20:53:24 · 394 阅读 · 0 评论 -
[笔记]右值引用
右值引用左值和右值C++中,左值指的是表达式结束后仍然存在的持久化对象,右值是表达式结束后就不在存在的临时对象。所有的具名变量都是左值,而右值不具名。简单区分左值和右值:左值能够取到地址,而右值不能。int i = 0; // i是左值,0是右值class Widget;W getWidget(){ return Widget();}Widget w = ge...原创 2019-07-25 22:43:15 · 195 阅读 · 0 评论 -
[笔记]2.智能指针
文章目录智能指针std::unique_ptrstd::shared_ptrstd::weak_ptr智能指针原生指针是一款很强大的工具,但是依据进数十年的经验,可以确定的一点是:稍有不慎,这 个工具就会反噬它的使用者。C++11标准中规定了四个智能指针:std::auto_ptr,std::unique_ptr,std::shared_ptr,std::weak_ptr.他们都是用来辅助...原创 2019-07-16 08:21:36 · 198 阅读 · 0 评论 -
[笔记]Modern CMake 2:基本介绍
Modern CMake 2:基本介绍最低版本CMakeLists.txt的第一行通常都是:cmake_minimum_required(VERSION 3.1)请注意,cmake_minimun_required是不区分大小写的,但根据Modern CMake 1:Modern CMake简介中的正确模式所言,函数名需要使用小写。在CMake3.12中,对最低版本的要求可以是一个区间,...原创 2019-06-07 20:53:12 · 826 阅读 · 0 评论 -
[笔记]Modern CMake 1:Modern CMake简介
Modern CMake 1:Modern CMake简介运行CMake工程的流程标准选项能做的和不能做的CMake反模式CMake正确模式学习Modern CMake的总结和记录。什么是Modern CMake?指的是CMake3.1+,甚至是CMake3.14+!她是整洁,强大,优雅的,你可以花更多的精力在编码上。CMake3.11+的版本速度上有显著的提升。运行CMake工程的流程...原创 2019-06-02 11:53:31 · 2047 阅读 · 0 评论 -
[笔记]移动语义和完美转发
移动语义和完美转发std::move、std::forwardstd::move是执行转换的函数模板。std::move无条件的将它的参数转换成一个右值。std::move本身不move任何东西,也不产生可执行代码。std::forward是执行转换的函数模板。std::forward当参数被绑定为右值时才将它的参数转换成一个右值。std::forward不转发任何东西,也不产生可执行代码。...原创 2019-07-25 22:43:48 · 493 阅读 · 0 评论 -
使用QPlainTextEdit完成一个代码编辑器
用QPlainTextEdit、CommentHighlighter、QCompleter组合实现一个完备的代码编辑器,包括功能:文本编辑、显示行号、高亮编辑去、代码自动补全等。原创 2022-09-22 20:30:00 · 2013 阅读 · 1 评论 -
Qt调用webserver完成登录操作
最近工作中需要使用webserver的方式进行登录界面的验证,之前写过一个用winsocket2的,好麻烦,这次决定使用qt了,研究了下,果然简单很多啊。整体而言,需要关注的类有两个:QNetworkAccessManager和QNetworkReply。话不多说,上代码。头文件如下,部分有注释:#ifndef HTTPOPERATOR_H#define HTTPOPERATOR_H#incl原创 2016-04-06 15:34:36 · 4850 阅读 · 2 评论 -
OSG资源汇总
七月过去了。 七月份,我连续写了18篇关于OSG和OSGEarth的博客。由于不是在学习中系统的写下的(在项目使用中),故而有些散乱的。因此,我打算按入门的先后来整理一下。OSG嵌入Qt1、处理鼠标和按键事件 http://blog.youkuaiyun.com/chlk118/article/details/46808889 2、OSG嵌入QGraphicsView框架 3、OSG嵌入QW...原创 2015-08-05 22:50:04 · 3816 阅读 · 8 评论 -
OSG漫游:实现按键控制的操作器
OSG提供了几种manipulator(操作器),已经能胜任很多场合了。但玩过射击类游戏的都比较熟悉使用按键的方式控制人物角色的移动,自己也想来实现一个,于是参考了OSG程序设计 一书,进行实现。功能:W或者↑箭头:前进S或者↓箭头:后退A或者←箭头:向左D或者→箭头:向右Q:左旋转E:右旋转鼠标左键拖动:左右视角鼠标右键拖动:上下视角鼠标中键:放大或者缩小+:加速移动-:减速原创 2015-08-03 20:17:24 · 5829 阅读 · 6 评论 -
Win下CLion+MinGW环境配置
JetBrains的C/C++ IDE:CLion已经出了1.2的版本了,随决定玩下看看。由于常在win下进行开发,故而决定配置一下win下的CLion,并使用OpenGL写一个例子程序进行测试。一、安装1、MinGW下载MinGW,官网地址http://www.mingw.org/。MinGW安装步骤不再赘述,只是要注意安装路径不要使用中文和空格即可。安装完成后,需要下载开发包和gc...原创 2015-11-09 21:44:07 · 74972 阅读 · 9 评论 -
OSG粒子系统应用:雨雪效果
目标:使用OSG的粒子系统完全对天气中雨雪效果的模拟雨效果直接上代码 osg::Matrixd matrixEffect; matrixEffect.makeTranslate(pos); // 设置粒子位置 osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform; // 对粒子范围进原创 2015-07-22 20:25:24 · 7966 阅读 · 5 评论 -
Windows下ffmpeg录制视频命令
目前需要一个视频录制的功能,本来想用ffmpeg进行编码的,结果研究了下,发现如果完成得花不少时间,但是项目比较急,所以,只好使用命令行了,先行记录下录制屏幕的命令,后续有时间进行编码研究。 我的需求是录制整个屏幕,故而,需要命令如下: ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 1600x900 -i...原创 2016-03-28 09:47:03 · 10909 阅读 · 9 评论 -
64位程序获取CPUID,不使用汇编指令
最近项目中想使用CPU,硬盘,网卡的ID进行加密授权验证,但是CPU的序列号获取网上都是一些使用内嵌汇编的方式,然后我的是64位程序,微软不支持内嵌汇编指令,只好研究替代方式了。进过查找,发现微软推出了__cpuid和__cpuidex函数替代了汇编指令,于是打算使用。 在网上找到有使用__cpuid获取厂商,family,CPU名称的代码,直接拿来使用了(^~^)。对于获取CPU的ID,网上一直原创 2016-04-22 12:02:16 · 9252 阅读 · 3 评论 -
Doxgen文档注释:C++
Doxgen的使用包括两个方面,一个是代码的注释规则,另外一个是利用doxgen生成相应的HTML和chm文件。注释规则文件注释 /*! * @file core.h * @brief 核心类core * @author author * @date 2016-11-12原创 2016-11-12 13:39:38 · 2396 阅读 · 0 评论 -
CLion+Qt5环境配置
Qt本身使用qmake进行编译的,但是CLion使用cmake进行组织管理,因此,在CLion中使用Qt需要一些特殊的cmake设置。新建工程打开CLion,新建project,工程名称为Widget修改cmakelist文件新建的工程,自动包含一个cmakelist.txt和main.cpp文件。要使工程可以使用Qt5的UI和信号槽机制,则需要分别包含UIC功能和MOC。...原创 2015-11-17 10:38:24 · 24596 阅读 · 3 评论 -
CLion显示行号,字体颜色设置
最近迷上CLion编辑器,对于一些习惯性设置,由于第一次使用,所以记录之以作分享。显示行号File->Settings->Editor->General->Appearance右侧,Show line numbers更改字体颜色字体File->Settings->Editor->Colors & Fonts->...原创 2015-11-14 20:59:49 · 50455 阅读 · 0 评论 -
OSG点选事件的基类
由于我的例子中有多处需要用到点选操作,我不想对一段代码到处复制粘贴,所以我写了一基类对点选操作进行管理。 其功能有: 1. 管理点选事件的添加和删除操作 2. 管理点选成功后Qt信号的发送 话不多数,上代码。 handleadapter.hclass HandleAdapter : public QObject{ Q_OBJECTpublic: HandleAdapter原创 2015-07-09 21:04:08 · 3197 阅读 · 2 评论 -
使用C++11的可变参数模板改造单例模式
本人以前写过一个C++的单例模式(见此 设计模式C++之单例),想法很简单,不值一提。 最近,看了C++11的新特性中有可变参数模板,想到是否可以以此来改造单例模式。参考了网上的一些经验,写了一个大多数情况下可以通用的一个单例模式,以此记录。template <typename T>class SingleTon{public: // 创建单例实例 template<type原创 2015-07-15 20:59:02 · 2648 阅读 · 0 评论 -
为OSG添加一个数字球(非OSGEarth方式)
在我的上一篇博客OSG嵌入Qt的第二种方式:使用QOpenGLWidget/QGLWidget中,在空旷的世界中只添加了cow,显得空旷,由于最近在做OSGEarth相关的开发,于是想着在OSG中怎么来添加一个数字球呢? 于是,来研究了下。发现,比我想象中的简单很多。 思路是: - 在OSG中添加一个球,这个用osg::Sphere实现 - 给新添的球设置一个半径为地球的半径,具体的就是WG原创 2015-07-21 20:21:08 · 3836 阅读 · 9 评论 -
Qt实现对特定文件的遍历操作
在Qt编程中,经常用到对文件的遍历操作,一下记录对文件的大体操作,方法为:void getFileItems(const QString&strPaht){ //利用给定的路径构造一个QDir对象 QDirdir(strPaht); //判断给定的路径是否存在,不存在则直接返回 if(!d原创 2014-09-12 21:08:29 · 1167 阅读 · 0 评论 -
C++写的一个小的日志系统
日志系统的平时开始中不能少的实用工具,以前总是使用开源的日志工具,原创 2014-09-12 20:56:58 · 993 阅读 · 0 评论 -
关于Qt窗口保持宽高比的研究
近日,需要在Qt中保持普通窗口原创 2014-05-02 19:00:18 · 10313 阅读 · 2 评论 -
OSGEarth绘制Geometry:画线(一)
在OSGEarth中绘制线,首先考虑osgEarth::Annotation::FeatureNode。 功能描述如下: 1. 鼠标两次点击的点之间连线,为黄色的实线; 2. 最近一次点击的点和鼠标move到的点之间连线,为红色的虚线。 代码如下:drawline.hclass DrawLine : public HandleAdapter{public: DrawLine(Gr原创 2015-07-09 21:18:21 · 21886 阅读 · 13 评论 -
OSG获取鼠标点选事件的位置
OSG点选操作的思路是从osgGA::GUIEventHandler继承,并重新实现虚函数virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa);。获取到点选信息后,此处我们不进行处理,而是单一的传出去,由外部需要此点选信息的地方进行处理。对于传出信息,我选择了Qt的信号槽操作,因而,在继承原创 2015-07-08 22:13:36 · 12898 阅读 · 10 评论 -
OSGEarth嵌入Qt的QGraphicsView框架(二)
上一篇处理了QGraphicsView的鼠标、按键事件,本篇接着嵌入OSGEarth。 新建一继承自EventAdapter(一)的类GraphicsView,完成OSGEarth的嵌入工作。实现思路是QGraphicsView的Viewport用OpenGL来绘制,这样才可以完全OSG的update。而要完成每帧的更新,则需要一个定时器,每隔10ms更新一次,即每10ms调用一次OSG的f原创 2015-07-08 21:52:43 · 13086 阅读 · 3 评论 -
OSGEarth绘制Geometry:绘多边形(三)
功能描述如下: 1. 鼠标多次点击的区域绘制多边形,为黄色; 2. 最近一次点击的点以及第一次点击的点和鼠标move到的点之间连线,为两条红色的虚线,表示下次即将绘制的区域块。 代码如下:drawpolygon.hclass DrawPolygon : public HandleAdapter{public: DrawPolygon(GraphicsView* view);原创 2015-07-09 22:38:15 · 11622 阅读 · 3 评论 -
设计模式C++之单例
网上有很多关于设计模式的,本设计模式是经验积累下,总结出来的很实用和好用的模式。其中单例模式,是最常用的设计模型之一,它适用于在全局保持一个实例的情况。比如在数据库连接中,由于远程的数据库每次连接都要消耗大量的资源,故而我们可以设计一个单例的类来进行数据库的连接管理,全局只保存一个数据库的实例,也保证只在数据库没有连接的情况下进行连接,其他情况直接进行使用即可。C++的单例模式设计如下:原创 2014-09-12 21:21:05 · 859 阅读 · 0 评论 -
qt实现无标题栏透明可移动窗口
QT的常规对话框包括标题栏、图标Icon、关闭按钮,如下图所示: 在有些场景中,我们可能需要对标准对话框进行美化工作,比如,去掉标题栏和边框,并使整体表现出透明色的样子,如下图所示: 通过查找Qt的帮助文档,我们可以发现Qt的可视化控件基类中有一个方法void setWindowFlags(type),可以通过此方法对QWidget及其子类的窗体进行不同的属性设置。更原创 2014-09-12 21:15:58 · 9354 阅读 · 1 评论 -
OSGEarth绘制Geometry:绘圆(二)
功能描述如下: 1. 鼠标点击之处为圆心位置; 2. 以圆心到鼠标move的距离为半径绘圆; 3. 鼠标有点点击结束绘制; 4. 鼠标点击为新的圆心,继续下次绘制。 代码如下:drawcircle.hclass DrawCircle : public HandleAdapter{public: DrawCircle(GraphicsView* view); ~Dr原创 2015-07-09 21:58:31 · 10322 阅读 · 6 评论 -
OSG嵌入Qt的第二种方式:使用QOpenGLWidget/QGLWidget
几天前有朋友问OSG嵌入Qt的思路。我说整体思路就是用OpenGL的方式来进行OSG的绘制,而正好Qt已经整合了OpenGL的功能,我们可以以此为依托来进行OSG的渲染绘制工作。而在Qt中却有QWidget和QGraphicsView两种不同的体系框架,于是我们也就有了两种不同的嵌入方式,关于QGraphicsView的嵌入方式我前面的博客OSGEarth嵌入Qt的QGraphicsView框架已经原创 2015-07-18 21:00:41 · 19846 阅读 · 16 评论 -
OSG嵌入IE浏览器:使用QtActiveX控件
一直在qt上进行OSG相关的开发,于是也把OSG嵌入IE浏览器的方式实验了下。 首先,还是OSG先嵌入Qt,此处仍然使用的QGraphicsView体系,详情参见OSGEarth嵌入Qt的QGraphicsView框架一和二,此处不在赘述。 其次,新建Qt的ActiveX项目,如图: 项目创建成功后,会自动创建一类多继承自public QWdiget, public QAxBindable原创 2015-07-28 21:54:56 · 3892 阅读 · 5 评论 -
OSG使用HUD的方式创建小地图
在三维场景中我们经常遇到需要小地图的时候,由于小地图是一直显示在最前端的,所以可以考虑使用HUD相机的方式绘制一个小地图,甚至我们还可以在小地图上标示出当前的视点(或者模型)以及它的移动。 实现功能目标: - 实现小地图; - 在小地图上实时的标示出视点位置。 1、HUD相机创建代码如下: m_pHUDCamera = new osg::Camera; // 设置投影矩阵原创 2015-07-14 22:00:01 · 6087 阅读 · 1 评论 -
使用OSG碰撞检测功能检测两点通视
在三维场景中有时需要对两点求其是否可见,即两点之间有没有障碍物的遮挡。在OSG中则可使用碰撞检测完成此功能。 核心的碰撞检测代码为: // 创建需要进行检测的两点之间的线段 osg::ref_ptr<osg::LineSegment> line = new osg::LineSegment(point1,point2); // 创建一个IV osgUtil::Inte原创 2015-07-13 22:28:13 · 5645 阅读 · 3 评论 -
OSGEarth嵌入Qt的QGraphicsView框架(一)
近期在学习OSGEarth,看example,自己结合Qt写了一些小例子,特此记录一下。首先,考虑到OE(OSGEarth)嵌入到QGraphicsView中,首先收到按键、鼠标事件的就是QGraphicsView,因此,我们需要先把这一庞大的事件进行处理。 代码如下:.hclass EventAdapter : public QGraphicsView{public: Even原创 2015-07-08 21:27:48 · 14352 阅读 · 12 评论 -
OSG粒子系统应用:喷泉效果
粒子系统主要分为两大类: - 一是Effective中已有的效果,如雨雪的效果应用; - 二类是一步步从模版,发射器等创建。关于第一种的使用可以参见上一篇博客OSG粒子系统应用:雨雪效果。本篇博客来使用第二种方式创建一个喷泉的效果。 废话补多说,直接上代码:osg::ref_ptr<osg::Node> Fountain::createFountain(osg::Group* parent)原创 2015-07-25 13:41:35 · 4300 阅读 · 1 评论 -
OSGEarth绘制动态水效果
在OSGEarth上绘制水效果的思路为: 1. 使用OSG::Geometry的方式绘制多边形; 2. 在绘制的多边形上贴一个水的纹理; 3. 对纹理使用shader效果,使之动态展示。 此种方式适用于小范围的不严格的水效果,若需要大范围或者有水底效果的请使用OSGOcean。 代码如下:water.hclass Water : public HandleAdapter{public:原创 2015-07-10 21:22:35 · 7207 阅读 · 3 评论 -
OSGEarth的测量分析
我的测量有距离测量、面积测量、高度测量。 测量的结果显示都为一个PlaceNode,可以实时的显示测量的结果。 使用方式为:pPlaceNode = new osgEarth::Annotation::PlaceNode( MapNode, osgEarth::GeoPoint::GeoPoint(), "", textStyle);pPlaceNode->setDyn原创 2015-07-10 21:09:24 · 7904 阅读 · 3 评论