C++/Qt
C++痕迹记录
kestiny
这个作者很懒,什么都没留下…
展开
-
使用QPlainTextEdit完成一个代码编辑器
用QPlainTextEdit、CommentHighlighter、QCompleter组合实现一个完备的代码编辑器,包括功能:文本编辑、显示行号、高亮编辑去、代码自动补全等。原创 2022-09-22 20:30:00 · 1804 阅读 · 1 评论 -
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 · 3861 阅读 · 5 评论 -
OSG嵌入Qt的第二种方式:使用QOpenGLWidget/QGLWidget
几天前有朋友问OSG嵌入Qt的思路。我说整体思路就是用OpenGL的方式来进行OSG的绘制,而正好Qt已经整合了OpenGL的功能,我们可以以此为依托来进行OSG的渲染绘制工作。而在Qt中却有QWidget和QGraphicsView两种不同的体系框架,于是我们也就有了两种不同的嵌入方式,关于QGraphicsView的嵌入方式我前面的博客OSGEarth嵌入Qt的QGraphicsView框架已经原创 2015-07-18 21:00:41 · 19282 阅读 · 16 评论 -
为OSG添加一个数字球(非OSGEarth方式)
在我的上一篇博客OSG嵌入Qt的第二种方式:使用QOpenGLWidget/QGLWidget中,在空旷的世界中只添加了cow,显得空旷,由于最近在做OSGEarth相关的开发,于是想着在OSG中怎么来添加一个数字球呢? 于是,来研究了下。发现,比我想象中的简单很多。 思路是: - 在OSG中添加一个球,这个用osg::Sphere实现 - 给新添的球设置一个半径为地球的半径,具体的就是WG原创 2015-07-21 20:21:08 · 3775 阅读 · 9 评论 -
使用C++11的可变参数模板改造单例模式
本人以前写过一个C++的单例模式(见此 设计模式C++之单例),想法很简单,不值一提。 最近,看了C++11的新特性中有可变参数模板,想到是否可以以此来改造单例模式。参考了网上的一些经验,写了一个大多数情况下可以通用的一个单例模式,以此记录。template <typename T>class SingleTon{public: // 创建单例实例 template<type原创 2015-07-15 20:59:02 · 2610 阅读 · 0 评论 -
OSG粒子系统应用:雨雪效果
目标:使用OSG的粒子系统完全对天气中雨雪效果的模拟雨效果直接上代码 osg::Matrixd matrixEffect; matrixEffect.makeTranslate(pos); // 设置粒子位置 osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform; // 对粒子范围进原创 2015-07-22 20:25:24 · 7825 阅读 · 5 评论 -
OSG漫游:实现按键控制的操作器
OSG提供了几种manipulator(操作器),已经能胜任很多场合了。但玩过射击类游戏的都比较熟悉使用按键的方式控制人物角色的移动,自己也想来实现一个,于是参考了OSG程序设计 一书,进行实现。功能:W或者↑箭头:前进S或者↓箭头:后退A或者←箭头:向左D或者→箭头:向右Q:左旋转E:右旋转鼠标左键拖动:左右视角鼠标右键拖动:上下视角鼠标中键:放大或者缩小+:加速移动-:减速原创 2015-08-03 20:17:24 · 5754 阅读 · 6 评论 -
OSG资源汇总
七月过去了。 七月份,我连续写了18篇关于OSG和OSGEarth的博客。由于不是在学习中系统的写下的(在项目使用中),故而有些散乱的。因此,我打算按入门的先后来整理一下。OSG嵌入Qt1、处理鼠标和按键事件 http://blog.csdn.net/chlk118/article/details/46808889 2、OSG嵌入QGraphicsView框架 3、OSG嵌入QW...原创 2015-08-05 22:50:04 · 3786 阅读 · 8 评论 -
Qt调用webserver完成登录操作
最近工作中需要使用webserver的方式进行登录界面的验证,之前写过一个用winsocket2的,好麻烦,这次决定使用qt了,研究了下,果然简单很多啊。整体而言,需要关注的类有两个:QNetworkAccessManager和QNetworkReply。话不多说,上代码。头文件如下,部分有注释:#ifndef HTTPOPERATOR_H#define HTTPOPERATOR_H#incl原创 2016-04-06 15:34:36 · 4798 阅读 · 2 评论 -
Windows下ffmpeg录制视频命令
目前需要一个视频录制的功能,本来想用ffmpeg进行编码的,结果研究了下,发现如果完成得花不少时间,但是项目比较急,所以,只好使用命令行了,先行记录下录制屏幕的命令,后续有时间进行编码研究。 我的需求是录制整个屏幕,故而,需要命令如下: ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 1600x900 -i...原创 2016-03-28 09:47:03 · 10855 阅读 · 9 评论 -
64位程序获取CPUID,不使用汇编指令
最近项目中想使用CPU,硬盘,网卡的ID进行加密授权验证,但是CPU的序列号获取网上都是一些使用内嵌汇编的方式,然后我的是64位程序,微软不支持内嵌汇编指令,只好研究替代方式了。进过查找,发现微软推出了__cpuid和__cpuidex函数替代了汇编指令,于是打算使用。 在网上找到有使用__cpuid获取厂商,family,CPU名称的代码,直接拿来使用了(^~^)。对于获取CPU的ID,网上一直原创 2016-04-22 12:02:16 · 9175 阅读 · 3 评论 -
Doxgen文档注释:C++
Doxgen的使用包括两个方面,一个是代码的注释规则,另外一个是利用doxgen生成相应的HTML和chm文件。注释规则文件注释 /*! * @file core.h * @brief 核心类core * @author author * @date 2016-11-12原创 2016-11-12 13:39:38 · 2355 阅读 · 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 · 24509 阅读 · 3 评论 -
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 · 74864 阅读 · 9 评论 -
CLion显示行号,字体颜色设置
最近迷上CLion编辑器,对于一些习惯性设置,由于第一次使用,所以记录之以作分享。显示行号File->Settings->Editor->General->Appearance右侧,Show line numbers更改字体颜色字体File->Settings->Editor->Colors & Fonts->...原创 2015-11-14 20:59:49 · 50074 阅读 · 0 评论 -
OSG使用HUD的方式创建小地图
在三维场景中我们经常遇到需要小地图的时候,由于小地图是一直显示在最前端的,所以可以考虑使用HUD相机的方式绘制一个小地图,甚至我们还可以在小地图上标示出当前的视点(或者模型)以及它的移动。 实现功能目标: - 实现小地图; - 在小地图上实时的标示出视点位置。 1、HUD相机创建代码如下: m_pHUDCamera = new osg::Camera; // 设置投影矩阵原创 2015-07-14 22:00:01 · 5988 阅读 · 1 评论 -
使用OSG碰撞检测功能检测两点通视
在三维场景中有时需要对两点求其是否可见,即两点之间有没有障碍物的遮挡。在OSG中则可使用碰撞检测完成此功能。 核心的碰撞检测代码为: // 创建需要进行检测的两点之间的线段 osg::ref_ptr<osg::LineSegment> line = new osg::LineSegment(point1,point2); // 创建一个IV osgUtil::Inte原创 2015-07-13 22:28:13 · 5508 阅读 · 3 评论 -
OSGEarth嵌入Qt的QGraphicsView框架(一)
近期在学习OSGEarth,看example,自己结合Qt写了一些小例子,特此记录一下。首先,考虑到OE(OSGEarth)嵌入到QGraphicsView中,首先收到按键、鼠标事件的就是QGraphicsView,因此,我们需要先把这一庞大的事件进行处理。 代码如下:.hclass EventAdapter : public QGraphicsView{public: Even原创 2015-07-08 21:27:48 · 14248 阅读 · 12 评论 -
设计模式C++之单例
网上有很多关于设计模式的,本设计模式是经验积累下,总结出来的很实用和好用的模式。其中单例模式,是最常用的设计模型之一,它适用于在全局保持一个实例的情况。比如在数据库连接中,由于远程的数据库每次连接都要消耗大量的资源,故而我们可以设计一个单例的类来进行数据库的连接管理,全局只保存一个数据库的实例,也保证只在数据库没有连接的情况下进行连接,其他情况直接进行使用即可。C++的单例模式设计如下:原创 2014-09-12 21:21:05 · 839 阅读 · 0 评论 -
OSGEarth绘制Geometry:绘多边形(三)
功能描述如下: 1. 鼠标多次点击的区域绘制多边形,为黄色; 2. 最近一次点击的点以及第一次点击的点和鼠标move到的点之间连线,为两条红色的虚线,表示下次即将绘制的区域块。 代码如下:drawpolygon.hclass DrawPolygon : public HandleAdapter{public: DrawPolygon(GraphicsView* view);原创 2015-07-09 22:38:15 · 11427 阅读 · 3 评论 -
OSGEarth嵌入Qt的QGraphicsView框架(二)
上一篇处理了QGraphicsView的鼠标、按键事件,本篇接着嵌入OSGEarth。 新建一继承自EventAdapter(一)的类GraphicsView,完成OSGEarth的嵌入工作。实现思路是QGraphicsView的Viewport用OpenGL来绘制,这样才可以完全OSG的update。而要完成每帧的更新,则需要一个定时器,每隔10ms更新一次,即每10ms调用一次OSG的f原创 2015-07-08 21:52:43 · 12841 阅读 · 3 评论 -
OSG获取鼠标点选事件的位置
OSG点选操作的思路是从osgGA::GUIEventHandler继承,并重新实现虚函数virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa);。获取到点选信息后,此处我们不进行处理,而是单一的传出去,由外部需要此点选信息的地方进行处理。对于传出信息,我选择了Qt的信号槽操作,因而,在继承原创 2015-07-08 22:13:36 · 12802 阅读 · 10 评论 -
OSG点选事件的基类
由于我的例子中有多处需要用到点选操作,我不想对一段代码到处复制粘贴,所以我写了一基类对点选操作进行管理。 其功能有: 1. 管理点选事件的添加和删除操作 2. 管理点选成功后Qt信号的发送 话不多数,上代码。 handleadapter.hclass HandleAdapter : public QObject{ Q_OBJECTpublic: HandleAdapter原创 2015-07-09 21:04:08 · 3176 阅读 · 2 评论 -
OSGEarth绘制Geometry:画线(一)
在OSGEarth中绘制线,首先考虑osgEarth::Annotation::FeatureNode。 功能描述如下: 1. 鼠标两次点击的点之间连线,为黄色的实线; 2. 最近一次点击的点和鼠标move到的点之间连线,为红色的虚线。 代码如下:drawline.hclass DrawLine : public HandleAdapter{public: DrawLine(Gr原创 2015-07-09 21:18:21 · 21498 阅读 · 13 评论 -
关于Qt窗口保持宽高比的研究
近日,需要在Qt中保持普通窗口原创 2014-05-02 19:00:18 · 10113 阅读 · 2 评论 -
C++写的一个小的日志系统
日志系统的平时开始中不能少的实用工具,以前总是使用开源的日志工具,原创 2014-09-12 20:56:58 · 970 阅读 · 0 评论 -
Qt实现对特定文件的遍历操作
在Qt编程中,经常用到对文件的遍历操作,一下记录对文件的大体操作,方法为:void getFileItems(const QString&strPaht){ //利用给定的路径构造一个QDir对象 QDirdir(strPaht); //判断给定的路径是否存在,不存在则直接返回 if(!d原创 2014-09-12 21:08:29 · 1114 阅读 · 0 评论 -
qt实现无标题栏透明可移动窗口
QT的常规对话框包括标题栏、图标Icon、关闭按钮,如下图所示: 在有些场景中,我们可能需要对标准对话框进行美化工作,比如,去掉标题栏和边框,并使整体表现出透明色的样子,如下图所示: 通过查找Qt的帮助文档,我们可以发现Qt的可视化控件基类中有一个方法void setWindowFlags(type),可以通过此方法对QWidget及其子类的窗体进行不同的属性设置。更原创 2014-09-12 21:15:58 · 9282 阅读 · 1 评论 -
OSGEarth绘制Geometry:绘圆(二)
功能描述如下: 1. 鼠标点击之处为圆心位置; 2. 以圆心到鼠标move的距离为半径绘圆; 3. 鼠标有点点击结束绘制; 4. 鼠标点击为新的圆心,继续下次绘制。 代码如下:drawcircle.hclass DrawCircle : public HandleAdapter{public: DrawCircle(GraphicsView* view); ~Dr原创 2015-07-09 21:58:31 · 10162 阅读 · 6 评论 -
OSGEarth的测量分析
我的测量有距离测量、面积测量、高度测量。 测量的结果显示都为一个PlaceNode,可以实时的显示测量的结果。 使用方式为:pPlaceNode = new osgEarth::Annotation::PlaceNode( MapNode, osgEarth::GeoPoint::GeoPoint(), "", textStyle);pPlaceNode->setDyn原创 2015-07-10 21:09:24 · 7732 阅读 · 3 评论 -
OSGEarth绘制动态水效果
在OSGEarth上绘制水效果的思路为: 1. 使用OSG::Geometry的方式绘制多边形; 2. 在绘制的多边形上贴一个水的纹理; 3. 对纹理使用shader效果,使之动态展示。 此种方式适用于小范围的不严格的水效果,若需要大范围或者有水底效果的请使用OSGOcean。 代码如下:water.hclass Water : public HandleAdapter{public:原创 2015-07-10 21:22:35 · 7066 阅读 · 3 评论 -
OSG粒子系统应用:喷泉效果
粒子系统主要分为两大类: - 一是Effective中已有的效果,如雨雪的效果应用; - 二类是一步步从模版,发射器等创建。关于第一种的使用可以参见上一篇博客OSG粒子系统应用:雨雪效果。本篇博客来使用第二种方式创建一个喷泉的效果。 废话补多说,直接上代码:osg::ref_ptr<osg::Node> Fountain::createFountain(osg::Group* parent)原创 2015-07-25 13:41:35 · 4240 阅读 · 1 评论 -
使用Qt的QListWidget完成拖拽功能
代码逻辑:1、 利用方法setViewMode(QListView::IconMode)来完成QListWidget的显示模式设置,即只显示图标模式。2、 利用方法void addTypeAndItems(const QString& strRootPaht, const QString&strType)完成对给定文件中特定模型的读取工作(实现见附录)。原创 2014-09-12 21:09:25 · 5909 阅读 · 2 评论