自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 关于QGraphicsScene的items/itemAt函数无法正确获取项及removeItem后界面残留问题解决

这段话的意思就是索引算法(BspTreeIndex)的目的是加快items/itemAt的查找效率,但是如果是动态场景,NoIndex可能会更快(注意这里所说的更快并不是查找快,查找的效率永远都是BspTreeIndex更快,这里指的是改变item内容时,其实就是调用prepareGeometryChange的时候)。采用的是建立二叉树的方法来查找item,主要目的是scene中item很多时提高查找效率,因为这种办法不会遍历所有item。那么这里更新的是什么呢,其实就是内部二叉树的索引。

2023-08-16 21:57:26 1397 2

原创 OsgEarth3.2加载天地图失败问题分析与解决

这里不讨论如何用OsgEarth加载天地图,只记录一下在加载天地图过程中的失败原因及解决方案。OsgEarth加载天地图其实有两个问题,一个是请求头问题,一个是mineType问题。请求头问题首先我们加载天地图时的token是使用浏览器端的(服务器token如何使用我也不知道)。我们可以随便拼接一个url,把url放在浏览器上是可以正常请求的,但是我们自己写代码去请求的时候会返回类似token不匹配的错误: https://t0.tianditu.gov.cn/img_w/wmts?SERVICE

2022-04-12 19:27:51 2583 11

原创 QT核心-元对象的其他妙用 -- 二

信号槽的参数及返回值承接上篇,我们先还原Test的代码,仍然使用宏的形式定义信号槽,然后给信号槽增加一个参数#ifndef TEST_H#define TEST_H#include <QObject>class Test : public QObject{ Q_OBJECTpublic: explicit Test(QObject *parent = nullptr);signals: void testSignal(int);public sl

2022-04-02 15:40:45 495

原创 QT核心-元对象的其他妙用

首先,这个功能不是我原创的,它是发表于QT内部的一个大佬,原文链接:Dynamic Signals and Slots。他的这篇文章指出,在常规的开发中,信号和槽都是在编译期指定的,没办法在运行时增删。注意:这里的运行时增删不是指connect连接或disconnect取消连接信号槽,而是增加一个函数,把这个函数当作信号或者槽来使用。原文的代码看着我实在头疼,感觉跟写着玩儿似的,而且到现在为止我也没有用到动态增删信号槽的功能,所以这里不解析原文的代码了,而是介绍一下我看了原文代码之后对它所使用功能的理解和

2022-04-02 15:40:10 1013

原创 QT McQuickBoot --- 二

承接上文,前一篇文章说了QuickBoot框架中WidgetIoc的作用及用法,至此我们把界面搭建好了,现在我们需要实现业务功能了。优化界面前面我们搭建的界面只是为了演示如何组装各个模块,但模块内啥功能都没有,现在我们给第二个界面添加一个按钮。ChildWidget2.cpp#include "ChildWidget2.h"#include <QDebug>#include <QPushButton>#include <McWidgetIoc/McWidget

2021-10-07 14:54:51 531

原创 QT McQuickBoot

源码地址gitee,github下面会尽可能地列举框架的所有功能,并介绍每个功能的用法。这里并不会讲解它是怎么实现的,但不用担心,它们的源码都很简单。正文以下样例都在QuickBootExample中可以找到。编译编译环境: Qt5.15(Qt6还未适配,低版本可能需要调整一下部分API)、C++17整个框架的编译其实非常简单,因为我把一些依赖的第三方库源码也直接传到代码仓了,所以下载最新tag的源码,用QtCreator打开就能直接编译,但是有一些注意点,以下编译选项都在common.pri

2021-10-06 15:45:59 809 9

原创 QT核心-connect函数及信号槽

信号槽可以说是我们使用QT时用得最多的功能,使用起来非常简单、方便,可能大多数人对它的直观理解是用来代替回调函数。也许最开始确实是这个目的,但是时至今日,它可以用来实现更多的功能,同时也有很多细节需要注意。信号槽的注意点基本集中在connect函数的第五个参数上,吃透这第五个参数的所有标志位就能用它实现更多功能啦。同时的,你也能更了解QT的一些核心机制了,例如生存线程、事件循环及元对象。因为我写文章的水平着实菜鸡,虽然很想让更多学QT的人少走一些弯路并逐渐壮大QT社区,但很多东西确实没法很好的表达出来,

2021-03-22 21:01:56 1024

原创 QT核心-事件循环其他用途

先总结一下前面几章:生存线程就是QObject的event及其衍生方法的执行线程。事件循环内部为一个死循环,它会托管当前线程并将当前线程中的事件分发给相应的对象,且对象的事件执行函数(event)所在的执行线程为当前线程。当开启一个新事件循环时,会阻塞当前流程,类似于while(true)的效果。但与之不同的是while(true)在没有退出循环前当前线程会一直阻塞,什么都得不到执行,但事件循环仅仅只是阻塞当前流程,如果当前线程还有其他事件,这些事件仍然能够得到执行。同一个线程中同一时间只会有一个

2021-03-21 14:02:27 346

原创 QT核心-事件循环

事件循环接着上一章没说完的继续,事件循环的源码其实不太好刨,它是和平台相关的,比如Windows上它用了PostMessage、PeekMessage和WaitForSingleObject等一系列Windows API完成的,当然线程也是调用平台API,所以这里不过多关注其源码,而是更多的理解我们能用到的功能。上一章总结其实就一句话: 生存线程就是QObject的event方法的执行线程。通过方法名我们就能知道这个方法是和事件相关的,它并不会被线程直接调用,而是由QEventLoop内部去调用,我们看

2021-03-14 16:49:46 280

原创 QT核心-生存线程及事件循环

前言QT最核心的两个东西莫过于元对象和事件循环了,这两个特性是日常编程中的两大利器,理解和使用好这两个特性对写QT程序有非常大的帮助,就比如QT一个创新功能点信号槽就是利用这两个特性实现(后面可能会单独讲解),我们这里率先理解一下事件循环,毕竟元对象里面有个东西也是利用事件循环来实现的(后面会说)。正文生存线程首先,我们要知道生存线程的概念,也正是因为QObject的生存线程问题,导致QT的多线程变复杂了,同时功能也更强大了。大家在网上搜QT多线程的话一定能接触到的一种方式:QObject o;

2021-03-14 16:49:15 406

原创 C++静态变量初始技巧

说在前面首先要明确以下几点:C++中全局静态变量和静态成员变量(以下简称静态变量,其他类型的变量会单独说明)的初始化顺序由编译器决定,不同编译器下初始化顺序基本不一样,但是在同一个编译器下顺序却是一样,但是我们很难掌握其顺序(g++中好像有明确的方法指定顺序),所以静态变量在初始化时不要相互依赖。正常情况下静态变量在进入main函数之前即会完成初始化(有例外)。局部静态变量的初始化时机十分明确,一定是第一次调用该函数时初始化。只要某一个模块(exe程序,dll库)被加载,那么该模块中的静态变量一

2020-12-27 14:54:34 2916

原创 关于QT在release模式下对QML和JS文件的优化问题

直接上结论经过测试,该问题只在QT5的某几个版本会出现。本人电脑上装的5.5和5.15,这两个版本没有该问题,我在公司电脑上装的5.12,确实会存在该问题。我通过查看一些qrc的编译输出文件而得出,应该是5.12前后的几个版本,QT经过了两次优化所遗留的问题。问题如下:在QT项目中添加qrc资源文件在该资源文件中添加以.js结尾的文件在cpp中使用QFile读取该js文件,并输出文件内容经过以上步骤编译运行应该能够看到结果: 如果你使用的刚好是QT5.12(具体是哪几个版本我不清楚,这

2020-12-19 14:14:13 761 2

原创 QT/C++编程规范

前言    这是自己整理出的一套自己正在使用的编程规范,并没有涵盖有所东西,只有一些自己常用或正在使用的,后面也许会继续添加新用到规范。此规范更偏向于java,借鉴了google、qt和java相关的编程规范。    由于我自己更希望能够写出面向接口的编程,所以这里先说一下自己对接口和抽象类的理解和在C++中的定义方式:       - 接口:只有纯虚函数的类称为接口。接口是对行为的抽象,用于描述某一实体所拥有的行为。&

2020-07-29 11:51:04 1464

原创 QT IOC容器-使用教程--声明式注入

    直接开搞,接着上一章没说完的。之前XML配置文件形式的注入一方面是实现了对象的构造和对象的使用相分离的理念,另一方面还将对象之间的关系配置移到了配置文件中,这样在实现一个工具库的时候可以使用它的配置能力极大程度提升灵活性(可参考McLogQt)。而声明式注入则去掉了配置文件,直接在类的声明时就指定了需要获取哪一个bean,这里就直接对之前XML注入中的几个类加入几个声明代码即可。首先在类R中加入Q_CLASSINFO(MC_BEANNAME, "r")为其指定一个beanNa

2020-07-29 11:50:28 674

原创 QT IOC容器-使用教程

前言    其实这个库的大致使用方法在github和gitee上的README里大致都有介绍,或者从测试代码中也能找到,这里只是举几个例子来说明一下用法。    关于IOC(控制反转)到底是什么可以自行百度一下,由于我这个库本身就是抄的Spring Boot,所以实现原理更偏向于DI(依赖注入)。而我对IOC和DI的区分理解为:IOC为一个技术理念,而DI为IOC的一种实现。    我目前使用的QT版本为5.15,理论上5.12也行,但其他版

2020-07-29 11:49:48 1133 2

原创 QT IOC容器-前言

前言的前言    说实话,写这系列文章心里还是比较忐忑的。自认为自身的技术水平并不算高,我写的这几个开源库中的技术细节和面向对象的设计理念都是自己撸了这么久的代码和查阅别人开源库所参悟出来的,所有东西都是自己的理解,也不知道对不对。大家将看且看,如果有幸能得到部分人的认同,我可能会开心好久。同样的,如果有人能指导一二,我也非常感谢,毕竟又学到了新东西不是吗。这回是正文    好的废话不多说,开始进入正题。这篇文章主要是一个序言,陈列出我现有的一些成果和创作历程

2020-07-29 11:48:25 653 2

原创 Java There is no PasswordEncoder mapped for the id "null"和Encoded password does not look like BCrypt

在使用SpringBoot的security+oauth2时可能会出现这种情况,百度之后能搜出个大概,主要是security5.0以上出现的加密问题。这时需要添加一个加密方式@Beanpublic PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder();}@Autowiredpublic void ...

2019-03-24 17:54:35 275

原创 希尔排序

首先,这是我的第一篇博客,可能存在排版或者其他各式各样的问题

2018-06-10 20:01:48 139

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除