
c++
文章平均质量分 52
wb175208
这个作者很懒,什么都没留下…
展开
-
UE4.27 C++调用DLL
3.在项目RouteInterface下面添加一个类:TestDll,并且把头文件保存到Include/RouteInterface下面,并且在添加一个导入导出符号的头文件ExportGlobal.h。6.编译以后,RouteInterface.dll生成在:F:\004_Ue4\RotorUAV_26_27\Binaries\Win64 目录下。RouteInterface.lib生成在F:\004_Ue4\RotorUAV_26_27\Source\Libs目录下。编译选项:Debug x64。原创 2022-12-30 16:13:02 · 1330 阅读 · 0 评论 -
qt opengl 使用不同的颜色绘制线框三角形
代码】qtopengl使用不同的颜色绘制相框三角形。原创 2022-07-27 22:27:02 · 899 阅读 · 0 评论 -
Qt opengl 让物体在关照下动起来,形成动画
代码】Qtopengl让物体在关照下动起来,形成动画。原创 2022-07-27 10:57:50 · 518 阅读 · 0 评论 -
Qt OpenGL一个旋转的立方体
先看效果:顶点着色器:片段着色器使用的图片aaa原创 2022-07-10 23:34:53 · 537 阅读 · 1 评论 -
C++动态绑定技术:虚函数表
C++ 作为面向动态语言,有三大特性:封装、继承、多态。其中多态特性的实现就是基于C++中的虚函数实现的。每一个带有虚函数的类都会有一个虚函数表,那么到底虚函数表中存的什么函数呢?先看一段代码示例:运行以后查看obj3监视:在监视中可以看到obj3下面有一个_vfptr数组,数组里面有两个变量:函数的指针,分别是:[0] 0x0034111d SubB::fun1(void) [1] 0x00341014 SubA::fun2(void)对象obj3调用函数fun1的时候会调用 SubB::f原创 2022-06-12 15:14:11 · 177 阅读 · 0 评论 -
使用QT设计飞机编队的功能
国庆阅兵的时候,战斗机组成各种编队一起飞过天安门的场景很是壮观,让国人振奋。我们使用软件把编队的方式绘制出来,更加直观的展现给大家。在一个编队中一般会有一架长机和多架僚机,长机一般处于编队居中或者靠前的位置,而僚机在会在长机的周围,编队的图形一般是对称。软件实现了以下功能:VS2010 + QT4.8.6 + x64以上功能使用Qt的GraphicsView和GraphicsScene、GraphicsItem绘制完成,GraphicsScene用来绘制场景,GraphicsView用来展示。每种类型的飞原创 2022-06-12 11:38:13 · 1423 阅读 · 0 评论 -
C语言的内存分布
C语言中的内存分布原创 2022-03-27 12:22:15 · 1126 阅读 · 0 评论 -
C++中结构体内存对齐
C++中结构体内存对齐原创 2022-03-26 19:47:52 · 1004 阅读 · 0 评论 -
OpenDDS运行实例
因为OpenDDS是分布式的部署,所以一般发布端和订阅端都不在同一台电脑上。我在同一台电脑上进行测试,所以ip地址为:127.0.0.11.发布端1.1 新建ior文件在根目录先新建repo.ior文件:IOR:010000001e00000049444c3a4f70656e4444532f444350532f44435053496e666f3a312e30000000010000000000000080000000010102000a0000003132372e302e302e310039303原创 2021-11-16 17:53:45 · 3129 阅读 · 1 评论 -
VS2015开发OpenDDS实例(ACE_TAO_6.5.10+OpenDDS_3.12+ActivePerl-5.28)
1. 新建ild文件新建一个txt文档,命名为:MessageTopic.idl使用文本工具打开这个文件,输入以下内容后保存module MessageTopic{ #pragma DCPS_DATA_TYPE "MessageTopic::Msg" #pragma DCPS_DATA_KEY "MessageTopic::Msg uuid" struct Msg{ string uuid; string msgInfo; };};备注:MessageTopic::Msg:必原创 2021-11-13 17:07:49 · 2836 阅读 · 0 评论 -
VS2010每次都运行的时候,都会重新生成;加快编译速度
每次编译的时候都要重新编译。需要重新设置一下就可以了。加快编译的设置有时在编译的时候,会输出:说明多线程编译没有成功。需要把最小生成选项修改一下就可以了再次编辑的时候就是真正的多线程编译了,加快了编译的速度。aaa...原创 2021-11-07 17:26:36 · 1988 阅读 · 0 评论 -
CTK编译VS2015+Qt5.10
1.下载CTK下载地址:https://github.com/commontk/CTKCTKData下载地址:https://github.com/commontk/ctkdataCMake下载地址:https://cmake.org/download/下载完成以后,安装CMake,把CTK和CTKData放置到如下目录:2.配置CTK1.修改Qt版本打开文本文件:E:\CTK\CTK-master\CMake\ctkMacroSetupQt.cmake把原来的4改成5,因为使用的Qt5原创 2021-09-16 15:02:55 · 768 阅读 · 0 评论 -
QT C++调用PyQt5
1.新建Python项目使用QtDesigner设计界面使用PyUIC把设计的界面转换成py文件编写业务代码和Ui文件结合起来SetTextStyleMainWindow.pyimport sysfrom SetTextStyle import Ui_SetTextStylefrom PyQt5.QtWidgets import QMainWindow, QApplication, QCheckBox, QSpinBoxfrom PyQt5.QtGui import QPen, QPal原创 2021-08-20 16:46:02 · 2380 阅读 · 1 评论 -
C++ 调用Python文件实例
首先编写py文件import sysdef testAdd(a, b): return a + bdef fun(a): return a + 9编写C++文件 //初始化Python Py_Initialize(); //加载Test1模块 PyObject* moudel = PyImport_ImportModule("Test1"); //加载模块中的函数fun PyObject* func = PyObject_GetAttrString(moude原创 2021-08-16 18:56:24 · 124 阅读 · 0 评论 -
C++中高精度时间的记录控制
在C++中有时会用到定时器,或者在线程中使用sleep来充当定时器,但是往往定时器的精度到不到自己的需求,下面介绍一种高精度的计时的方法。static auto startNanoSecond = std::chrono::high_resolution_clock::now();//初始赋值,局部静态变量值赋值一次 auto endNanoSecond = std::chrono::high_resolution_clock::now(); long long deltaMS = std::原创 2021-06-08 09:19:13 · 592 阅读 · 0 评论 -
QT自定义Tab标签页,可以删除、添加、修改和选中
先看效果:部分源码#pragma once#include <QWidget>#include <vector>#include "ui_QtGuiTrapeTabBar.h"#include "ITrapeTab.h"#include "ITrapeTabAdd.h"//梯形标签class QtGuiOneTrape;class QtGuiTrapeTabBar : public QWidget , public ITrapeTab , pub原创 2021-05-12 15:15:58 · 3868 阅读 · 7 评论 -
C++ 洗牌算法的实现
大家在玩斗地主的时候,每次都是随机发牌,每个人拿到手的牌都是和上一次不一样的。那么电脑是如何做到随机的呢?首先大家想到的就是采用系统本身的随机算法产生的随机数,每次都根据产生的随机数来获取不同位置的。举个简单的例子:0-9这10个数,如何让这10个数随机排序呢,而且保证每次出现的概率都是一样的?1.首先初始化两个数组含有10个整数的数组A和数组B,A数组用来存放原始数据,B数组用来存放随机的排序后的数2.根据随机产生的位置来取A数组中对应位置整数并且依次放到B数组中(例如:第一次产生的随机数是3,则原创 2020-10-16 13:18:34 · 3281 阅读 · 0 评论 -
使用nmake编译gdal-已成功
1.下载GDAL在官网上直接下载就可以了,我使用的版本是gdal-2.0.22.解压,注意不要使用中文路径3.编辑nmake.opt打开文件 gdal-2.0.2\gdal\nmake.optLine46改为: MSVC_VER=1900Line62修改GDAL_HOME地址:GDAL_HOME = "F:\vs2015\osg_build\build_step\gdal-2.0.2\gdal\build_vs2015_x64\install"GDAL_HOME:表示编译完成之后的结果原创 2020-09-18 08:58:18 · 947 阅读 · 0 评论 -
使用CMake编译Geos3.5.0
1.下载cmake-3.13.2-win64-x64.msi ,安装并且勾选添加到系统的环境路径网上有很多同样的资源2.CMakeList.txt把下面的内容保存为CMakeList.txt替换掉原来的CMakeList.txt################################################################################### Main GEOS build configuration file for CMake build s原创 2020-09-16 19:53:42 · 1744 阅读 · 0 评论 -
C++ 中头文件包含顺序问题
在一个项目中出现了一下的编译错误,始终找不到问题出在哪.1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\pplinterface.h(238): error C2976: “std::atomic”: 模板 参数太少1> C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\atomic(655): note: 参见“std::atomi原创 2020-09-10 09:43:01 · 654 阅读 · 0 评论 -
C++虚函数中的默认参数
注意:虚函数中尽量不要使用默认参数!!!父类#pragma onceclass Base {public: Base(); ~Base(); virtual void setNumber(int num = 2) = 0;};#include "Base.h"Base::Base() {}Base::~Base() {}子类#pragma once#include "Base.h"class A :public Base {public: A(); ~A(原创 2020-09-09 18:00:34 · 2312 阅读 · 3 评论 -
C++中的指针、引用、指针引用
在C++指针的用处很大,可以快读的访问地址空间,而且本身不占太大内存。指针操作在参数传递的时候非常方便。既可以作为传入参数,又可以作为返回值。但是可不可作为函数的传出参数呢?下面通过一个例子来说明。教室里面包含多个老师,每个老师管理多个学生学生类#pragma once#include <string>class Student {public: Student(); Student(int id,std::string name); ~Student(); int&原创 2020-08-27 13:31:47 · 196 阅读 · 0 评论 -
Python调用C++
Python可以通过调用Dll中的到处符号调用C++.新建一个QT的DLL项目:class MyMath {public: int add(int a, int b); int multiply(int a,int b);};extern "C" { QTPYTHONDLL_EXPORT int addEx(int a, int b); QTPYTHONDLL_EXPORT int multiplyEx(int a, int b); QTPYTHONDLL_EXPORT void原创 2020-05-16 23:39:16 · 1678 阅读 · 0 评论 -
C++ 内存对齐
先看一下代码运行结果://理论上占5字节struct { int x; char y;}Test;//理论上占6字节struct { int i; char c1; char c2;}Test1;//理论上占6字节struct { char c1; int i; char c2;}Test2;//理论上占6字节struct { char c1; char c2; int i;}Test3;int main(int argc, char *argv[])原创 2020-05-13 23:03:28 · 170 阅读 · 0 评论 -
C++ STL 中unordered_map和map
STL中unordered_map和map实现的原理不同:map:采用的是红黑树来实现节点的保存,所有键值都是经过排序的存储的;unordered_map:采用的数组+链表的形式保存的,根据不同的key的哈希值,存放到数组中不同的位置,然后使用链表来解决哈希值相同(冲突)的情况。下面是对2000000条数据进行效率的对比情况:#include <QtCore/QCoreApplica...原创 2020-05-06 15:50:09 · 771 阅读 · 1 评论 -
C++ dynamic_cast注意事项之二
之前的时候写过关于dynamic_cast相关的知识点,详见一前的文章:C++ dynamic_cast运算符的使用dynamic_cast:“XXX”不是多态类型这次要说的是向下装换的问题,dynamic_cast可以转换指针和引用,前提是这个指针和引用必须要有继承关系,父类中必须要有虚函数。class Base {public: virtual void showInfo() {...原创 2020-04-22 22:31:34 · 308 阅读 · 0 评论 -
C++构造函数为什么不能是虚函数
虚函数的调用需要虚函数表指针,而该指针存放在对象的内容空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数...原创 2020-04-15 22:24:44 · 599 阅读 · 0 评论 -
C++ 中的深拷贝和浅拷贝
浅拷贝浅拷贝指的是仅拷贝对象的所有成员,包括指针的值,而不包括其引用对象(例如指针指向的其他内容)。看下面这个例子:#pragma once#include <string>//学生class Student {public: Student(std::string name, int age); ~Student(); void printInfo();pr...原创 2020-03-14 22:05:54 · 168 阅读 · 0 评论 -
C++ friend的使用
友元类和友元函数是C++的一个总要的特性。友元类的所有函数都可以访问原始类的私有成员和保护成员。因此尽管友元被授予从外部访问类的私有部分的权限,但它并不与面向对象的编程思想矛盾,相反它提高了共有接口的灵活性。友元声明可以位于公有、私有或者保护部分,其所在的位置无关紧要。友元就行朋友一样可以把隐私部分公开出来,和朋友分享。#pragma once#include <string>...原创 2020-03-08 19:01:50 · 226 阅读 · 0 评论 -
Qt绘制直箭头和平滑的曲线箭头
先看绘制效果:直线箭头曲线箭头:#pragma once#include <QVector>#include <QPointF>#include "DrawGeoBase.h"//当前标绘要素 - 直箭头class DrawGeoStraightArrow :public DrawGeoBase {public: DrawGeoStraight...原创 2020-01-19 17:59:18 · 2713 阅读 · 5 评论 -
使用Floyd-Warshall算法求出两点之间的最短路径
求出下面任意两个点之间的最短路径:如何才能求出两点之间的最短路径呢?大家都知道学几何的时候,有一条定理就是:两点之间线段最短。但是在实际情况中,我往往两点之间没有之间的通路而是一些曲折的线路。上面已经给出了两点之间的线路路径,不能再通过两点时间的路径来计算他们最短路径了,根据以往的经验要想让两点之间的路程变短,只能引入第三个点,通过第三个点的中转才能缩短两点之间的路径。通过上图可知由4-&...原创 2020-01-17 00:13:01 · 802 阅读 · 0 评论 -
Qt使用深度优先搜索求出图的最短路径(二)
求出从第一个城市到第五个城市的最短路径:具体代码请看上一篇文章:Qt使用深度优先搜索和广度优先搜索遍历图 int gShortestPath = 99999;//最短路径 int gTarget = 5;//目标节点 int _currentLen = 0;//当前长度void Graph::shortestPathByDFS(GraphVertex vertex, int curr...原创 2020-01-15 00:26:17 · 1243 阅读 · 0 评论 -
Qt利用广度优先搜索实现迷宫寻宝
之前写过一篇关于利用深度优先搜索实现迷宫寻宝的例子,下面把这个例子改进了一下,通过广度优先搜索实现寻宝,先看看效果:深度优先搜索算法主要使用队列,通过队列保存已经扫描过的区域,即使用一层一层扩展的方法找到目标。每一个点的外层的搜索都是按照顺时针方向实现的:右下左上void UserMaze::findByBFS() { int next[4][2] = {//按照顺时针方向搜索 { 0...原创 2020-01-09 20:26:13 · 337 阅读 · 2 评论 -
Qt利用深度优先搜索实现迷宫寻宝
先看效果:利用QT搭建迷宫界面利用单选框来构造迷宫,设置障碍物和宝藏的位置利用深度优先搜索实现迷宫寻宝,并且在寻找的过程中避开障碍物。搜索算法在线程中进行定义方格的属性enum SignalGridType { SGT_UNLOCK = 0,//通路 SGT_LOCK = -1,//未通路 - 障碍 SGT_TARGET = 100,//目标 SGT_FIND = 200...原创 2020-01-05 23:50:47 · 564 阅读 · 0 评论 -
自定义标绘之八 - 后记
1 . 用户的自定时设计采用的MVC结构,数据模型和操作、绘制分离的方式,解耦了各个具体的几何体操作;2. 采用了多种设计模式的组合:单例模式、观察者模式、桥接模式、模板模式等3. 均采用的接口隔离方式,遵循开闭原则、接口隔离、依赖倒转、单一职责等原则;4. 在类与类之间很少使用,信号槽的方式,均是采用接口的方式。5. 每增加一个功能,都是采用添加的方式,而不是修改的凡是完成。aaa...原创 2019-12-30 12:20:01 · 270 阅读 · 0 评论 -
自定义标绘之七 - 数据的保存与读取
几何标绘完成之后,需要把标绘的内容保存到文件中,下次使用的时候,在加载起来就可以了。文件保存的基类://几何图形的问价保存class IGeoStorage {public: IGeoStorage(); ~IGeoStorage(); void setFile(FILE* file); virtual void saveTo(); virtual void loadFro...原创 2019-12-30 12:12:51 · 289 阅读 · 0 评论 -
自定义标绘之六 - 鼠标双击编辑几何体
在地图上绘制出几何体之后,用户往往会对不满意的几何体进行编辑,最常见的操作就是通过鼠标移动选中需要绘制的几何体,然后鼠标双击左键进行编辑或者拖动。//重新绘制基类 - 主要是传递当前需要重新绘制的几何数据class BaseGeo;class IResumeDraw {public: IResumeDraw(); ~IResumeDraw(); //鼠标双击的位置 virt...原创 2019-12-30 12:07:06 · 289 阅读 · 0 评论 -
自定义标绘之五 - 鼠标操作
当用户选中了需要绘制的要素时,需要通过鼠标的操作把要素绘制出来,而且同时要保证之前已经绘制完成的不在受到任何的干扰。所以在显示层面就分为两层:最下面的一层就是已经绘制好的图形数据,上面一层则是当前正在绘制的图形。这两层的管理通过一个类来管理://用户自定义图形的绘制/*这个用来显示用户自定义绘制的图形,分为两部分1.用户当前正在绘制的图形2.已经绘制完成图形*/#define D...原创 2019-12-30 11:51:38 · 389 阅读 · 0 评论 -
自定义标绘之四 -数据类型列表和数据列表的设计
数据类型列表:就是展现出可以绘制的数据类型,以图形或者文字的方式展现出来。而且展现出来的图形是能实时的反映出当前配置要素的显示风格。通过鼠标的单机实现类型的选择。数据列表:用于显示当前用户已经绘制的内容,以树形列表的形式表现出来,鼠标打击其中元素可以高亮显示单机的对象,双击可以居中显示所选的图形要素;可以显示某个元素或者某类元素的显隐状态.数据显示的要素定义文本(xml)<?xml ...原创 2019-12-30 10:16:13 · 345 阅读 · 1 评论 -
自定义标绘之三 - 几何数据管理
几何数据如何管理,这就需要一个单独的类来管理这些数据,包括对数据的增删改查,作为数据的同一的管理接口,需要在任何需要的地方调用,这就需要把这个管理类封装成一个单例模式,采用懒汉模式,这样就也可以实现全局调用!//用户自定义绘制数据管理#define UserDefineDataMgr() (UserDefineDataManager::getInstance())class USERDEF...原创 2019-12-30 08:19:47 · 219 阅读 · 0 评论