在对QImage进行渲染的时候,有两种方式。一种是使用qpainter,把QImage作为一个画布构造一个QPainter,这样就可以使用QPainter的绘图函数在QImage对象上进行一些操作。还有一种方法是直接对QImage的数据及进行操作。 首先要了解QImage储存图像数据的方式,Qimage::Format给出了很多中数据存储的方式, 官方文档https://doc.qt.io/qt-5/qimage.html#Format-enum 这里以Format_ARGB32为例,我们知道图片都是以一个一个像素…

2021年7月15日 0条评论 6385点热度 14人点赞 大脸猫 阅读全文

现在又两个数,2和6,在中间插入一个数值,那么我们一般用(2+6)/2 = 4,这样在中间插入一个值。 那么在A和B之间插入数据的公式为(A+B)/2。 有这样一个长度为6一维数组: {1,5,7,9,10,14} 在每两个数中插入一个数值,之后得到一个长度为11的数组。 只需要先调整原数据的位置,将索引*2得到在新数组中的位置,然后再利用上面的插值公式 d[index] = (d[index-1] + d[index+1])/2。代码如下: const int length = 6; const int newL…

2021年7月15日 0条评论 10008点热度 11人点赞 大脸猫 阅读全文

Qt提供了一个非常方便的多语言国际化方案,开发者使用它可以用非常简单的方式让程序支持多种语言。 这里记录一个qt多语言的最简单的示例,开发工具使用的使qtcreator。 要实现多语言得支持,首先得在代码中完成这几个步骤: #include<QTranslator> //实例化一个翻译模块的对象,并载入翻译文件 QTranslator translator; translator.load("translator.qm"); //使用QApplictioin的对象,为程序安装翻译模块 app.insta…

2021年7月15日 0条评论 7663点热度 10人点赞 大脸猫 阅读全文

C++是一门允许程序员自己管理内存的语言,程序员们可以用使用new和delete自由的在堆空间中申请和释放内存,当然也可以使用从C继承而来的malloc和free。这样的内存管理机制在对内存把控要求极高的应用场景下提供了极大的便利,但是如果程序员对C++的内存管理机制不够熟悉,没有正确的申请和释放内存,造成的后果无疑是灾难性的。那么这里就记录一下new 与delete的多种使用方式。   这是最简单,也是最常用的使用方式 class A; A *a = new a; delete a; 首先了解一下这里的…

2021年7月13日 0条评论 6796点热度 12人点赞 大脸猫 阅读全文

前言: 最近使用虚函数的时候遇到了一个坑,折腾了挺久,后来查了一些资料才搞明白,遂记录一下。 假如有两个类A、B。B继承A,那么这个时候,A类的指针类型可以指向B的对象。 class A{ public: void say(){ std::cout << "A" << std::endl; } }; class B:public A{ public: void say(){ std::cout << "B" << std::endl; } }; A* a = new …

2021年3月31日 0条评论 4645点热度 0人点赞 大脸猫 阅读全文

之前尝试重定向std输出语句,并没有找到合适解决重定向时如何捕获输出事件的问题,只能使用定时器定时的检测缓冲区中的内容。 《关于std::cerr\cout\cin的重定向》 之后我在一个开源项目的代码中找到一个方案可以完美的解决这个问题。 使用这个方法首先得先了解流缓冲区std::streambuf。流缓冲区是负责它所关联的流对象所有写入、读取操作的对象,流对象会将输入输出操作都委托给缓冲区对象,将缓冲区当作一个流对象与输入输出之间的一个中介。 std::streambuf的详细介绍,戳一戳 这里主要关注sync…

2021年3月18日 0条评论 4928点热度 2人点赞 大脸猫 阅读全文

前言: 作为一个使用C++做客户端开发的半个开发人员,自然是然不开cmake的。初识cmake还是在githup上寻找轮子的时候。大多数轮子里都会包含一个叫做CMakeLists.txt的文件,这时就需要cmake来生成编译文件了,每次都得花上很多时间在配置cmake上,现在回想那段日子,简直就是噩梦。也怪自己当初不爱文档,只爱百度。 然是这样一个东西,现在却觉得是一个十分方便的工具,遂分享一下使用心得。 CMake: CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能…

2021年2月22日 0条评论 6973点热度 7人点赞 大脸猫 阅读全文

FreeCAD中可以同时打开多个工程,每个工程都会有一两个与之对应的视窗,当同时打开多个工程时freeCAD是如何管理这些视窗的呢? 源码中定义了一个叫做BaseView的抽象类,想要与Document(工程对应的数据管理类)与之对应,最好是继承这个类。这个类中实现了一些与Document建立联系的方法,通过这些方法可以将BaseView绑定到Document中,在双方的对象中都可以获取到对方,十分的方便。 class GuiExport BaseView : public Base::BaseClass { TY…

2021年1月23日 0条评论 4773点热度 1人点赞 大脸猫 阅读全文

在使用C++进行程序开发过程中,免不了对std::cout\cerr的使用。我一般用于打印程序运行中的一些关键信息,以便于后面维护时方便灭虫。这两个输出语句都是将信息打印到控制台中,如果是GUI程序,那总不能在程序运行的时候还让控制台也跟着启动吧,这很不优雅。 比较好做法是将这些信息输出到特定的文件中,这样既不用带着控制台,又可以在程序崩溃之后,也能在文件中找到程序运行的流程。要实现这样功能我们需要对std::cerr\cout进行重定向。 这里主要使用ruduf函数来进行重定向 streambuf* rdbuf(…

2021年1月23日 5条评论 9579点热度 4人点赞 大脸猫 阅读全文

前言 最近一个接到这样一个需求,需要在FreeCAD的中加入一个自定义的工程文件。这需要搞懂原本框架中的新建工程、打开工程到保存撤销回复再到保存另存的一整套流程,还需要搞懂工程与UI之间的对应关系。于是开始翻看FreeCAD得源代码,一边看一边惊呼,居然还这样操作。然是我才疏学浅,这源代码使我受益匪浅。 整个工程得流程,可以分为三个部分: Command。这部分主要往程序主框架中注册一些命令,如新建、打开、保存等这些基本操作,然后将这些命令放到界面上去供用户使用。 UI。这个主要指工程所对应的ui,比如在一个模型工…

2020年11月26日 0条评论 5022点热度 3人点赞 大脸猫 阅读全文
145678