自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

漫步繁华街的专栏

技术交流,共同学习,共同进步!

原创 cef3 源码编译 2018-12 添加支持mp3 , mp4 的编译分支3282与最新的3578版

编译好的结果下载地址在最后========================================================================= 工作中需要使用cef3,来展示web页面,也就是我们做的软件 = 我们做的壳 + cef3做浏览器。但是由于许可原因,cef3官方并没有开放mp3、mp4、h264等音视频的支持。如果想要浏览...

2018-12-06 17:24:24 3616 132

原创 QT QTableView QTableWidget 复杂表头(多行表头) 、(冻结、固定特定的行)

demo下载地址在最后================================分割线======================================对于所有前端开发人员会留意到,我们在开发过程中对于表格使用频率还是挺高的,使用QT框架开发时候我们使用QTableView或者QTableWidget创建表格。其中表格分为 表格头与表格体:对于简单地表格,...

2018-09-26 19:58:24 12866 229

原创 QT QCharts QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失

demo 下载在最后======================================================================在最近接到的需求是这样的,画一个折线图,关键点使用空心的圆点标识出来,鼠标移动到关键点上,显示出当前数值;鼠标移走数值消失。我们遇到这个需求的时候,第一时间就会想到使用 QLineSeries 画折线图。首先初始化 ...

2018-09-18 17:23:17 7661 144

原创 gitlab 上fork别人的代码后,怎样去更新别人的新代码

我们在开发的时候,通常会对别人的项目进行fork之后,进行开发。fork就是远程端上一份别人仓库的拷贝。开发完成后,我们需要进行创建一个merge request。再由管理员进行代码审核,审核通过后允许merge。这样我们开发的代码就会合并到主项目中。但是当主项目的代码有更新,我们怎样将更新后的代码拉取、合并到本地呢?1.首先要确认是否建立了主项目的远程源:git remote -v ...

2018-09-06 11:51:52 3701

原创 使用 C++17 fold 表达式来大幅提升的QString的拼接效率

一、前言最近学习C++17,发现一个有趣的表达式-fold expression(折叠表达式)。为什么说它是有趣的?我们先说一下另外一个C++的特性-变参模板(variadic template),这是C++11新增的的特性,作用就是它可以接受任意个模版参数,参数包不能直接展开,需要通过一些特殊的方法,比如函数参数包的展开可以使用递归方式或者逗号表达式,在使用的时候有点难度。而这次C++17中...

2020-03-27 19:11:19 339

原创 好好的web页面,为什么嵌入到CEF3中就错位了?

一、问题引入 这些天在做一个windows客户端软件的二维码登陆需求,使用的是C++的框架+CEF3展示内容(二维码)的架构,其中CEF3仅仅用来展示web写的二维码。开发完成后,在测试和产品老师的电脑上居然二维码是错位的。实际效果如下:(其中二维码所在的白色区域是一个CEF3嵌套web页面,周围的蓝色区域是C++框架)图1是我做好的效果,给产品和测试老师运行的时候,...

2020-03-06 18:26:00 264 2

原创 C++ 实现高性能内存池

一、概述在 C/C++ 中,内存管理是一个非常棘手的问题,我们在编写一个程序的时候几乎不可避免的要遇到内存的分配逻辑,这时候随之而来的有这样一些问题:是否有足够的内存可供分配? 分配失败了怎么办? 如何管理自身的内存使用情况? 等等一系列问题。在一个高可用的软件中,如果我们仅仅单纯的向操作系统去申请内存,当出现内存不足时就退出软件,是明显不合理的。正确的思路应该是在内存不足的时,考虑如何管理并...

2020-03-05 17:54:42 266 1

原创 深入探究Qt HTTP的内部构架

一、前言当今互联网时代中,B/S(Browser/Server , 浏览器/服务器)以及C/S(Client/Server , 客户端/服务器)架构已经是绝对的主流软件架构设计方式(除了极少部分的单机软件),它们各有优缺点,这里我们不展开讨论。但是B/S以及C/S架构软件都会有Server,也就是B/S或者C/S中的S,无论是Browser还是Client都必须与Server进行数据交互、传输,...

2020-02-14 12:02:16 151

原创 PC端C++软件, 开启大地址,让32位程序使用4G内存

我在以前的文章中分析过软件的内存模型(链接点击这里),从中我们可以知道,程序运行起来以后,它将有自己独立的虚拟地址空间。这个空间的大小与操作系统的位数有关。目前使用C++开发的PC端软件一般都是开发32位的。那么32位的软件,最大寻址空间也就是4GB。其中很重要的一部分是给系统内核使用的内核空间。在32位的windows操作系统中,高地址的2GB空间就是给内核使用的内核空间,用户程序空间只有2GB...

2019-12-25 18:48:59 320

原创 一文让你学会PC软件升级,学不会过来打我

//创建新版本文件夹 emit changeText(QString("创建新版本文件夹...")); QString mainDir = QDir(m_OldVerPath + "/../").absolutePath(); m_NewVerPath = mainDir + "/" + m_NewVersion; result = FileOperate...

2019-12-20 14:58:50 272 3

原创 C++ 内存模型

1. 前言对于底层开发程序来讲,程序员一定要知道程序运行在内存上的分布,这特别重要。同样,对于中级语言C++来讲,内存模型很重要!内存模型很重要!内存模型很重要! 所以今天我们来一起分析和总结一下C++程序中的内存分布情况。2. 内核空间&用户空间C++的每个程序运行起来以后,它将拥有自己独立的虚拟地址空间。这个空间的大小与操作系统的位数有关。例如在32位的系统中,程序可寻址范围是...

2019-12-13 15:28:30 91

原创 C++ 内存泄露检测工具-Visual Leak Detector(VLD)

上一次我们对C++程序内存泄漏进行了总结,那么要想检查一个程序是否存在内存泄漏,面对动辄几万行的代码,想要一行一行的审查代码检查是否内存是否泄漏,显然效率很低,对于更大的项目也不太现实。所以我们需要借助一款能够自动检测内存是否泄漏(Memory Leak)的工具,就是我们今天要讲的Visual Leak Detector(VLD)一、工具描述:Visual Leak Detector是一个免...

2019-10-16 15:29:48 532

原创 C++ QT内存泄漏总结

对于编程来讲,每种语言都有各自的内存管理机制,他们并不是完全相同。有的语言比如JAVA、H5等无需编程人员关心内存是怎样创建,怎么释放的,系统会对内存自动管理。但是有些语言比如C、C++等,就需要程序员手动进行内存管理,比如需要的时候进行内存申请,不用的时候需要进行手动释放。在C++中,new与delete必须配对使用(既,有一个new,有且只能有一个delete)。delete少了,可能会造成...

2019-10-15 19:12:43 469

原创 html h5 快速查找手册 学习笔记

HTML 基本文档<!DOCTYPE html> <html> <head> <title>文档标题</title> </head> <body> 可见文本... </body> </html>基本标签...

2019-10-05 12:39:36 65

原创 c++ 中 vector、list 、set 、map等相关容器的区别

1. vectorvector 封装了数组 ,是有序的。在内存中是一块连续的内存空间进行存储。但是不支持用户指定空间大小。系统首先分配一个非常大的内存空间进行预备存储,当超过此分配的空间时在进行整体重新分配一块内存空间存储。这就让人感觉可以不指定vector即一个连续内存大小的感觉。通常默认非配的控件能够完成大部分存储的。优点:1. 随机访问元素快,支持[]下标与at()访问。2. 节省...

2019-08-05 18:13:29 453

原创 QT 带有动画的 圆形进度条 水波进度条

我们在使用其他软件的时候,经常能看到各种绚丽的进度条,其中带有水波波纹的进度条就是其中一个。对于PC端软件开发使用的QT,只是提供了process bar,样式十分单一。 所以这次我们就使用QT的paint 以及定时器来实现类似的水波进度条。先看一下最终效果图:这个是怎样实现的呢? 我们仍然是在一个QWidget上的paintEvent上重绘实现图形绘制 + QTimer 实现动画效果。首...

2019-07-29 18:18:23 811 34

原创 QT QPainter::antialiasing QPainter::textAntialiasing 反走样、抗锯齿探究

QT中使用QPainter 进行自行绘图的时候,为了防止“锯齿”的出现,我们会经常使用抗锯齿属性,也叫反走样, 既:QPainter::Antialiasing //绘图抗锯齿QPainter::TextAntialiasing //绘制的字体抗锯齿QT 只是和很多系统的绘图API一样,提供了抗锯齿的方法,不过抗锯齿的属性默认都是关闭的,QT也不例外。为了直观的理解抗锯齿(反走样)...

2019-07-24 14:22:23 2041 1

原创 QT 实现 带有动画效果的 switch button 开关按钮动

平时使用手机软件的时候,经常看到带有动画效果的开关按钮 switch button,效果非常炫。但是使用QT自带的控件并没有实现类似的switch button。如果想要使用,只能我们自己进行自己封装。先看一下效果图:怎么实现呢? 我们这次使用 QWidget 的 paintEvent 来绘制这种效果。 下面分步骤解析一下:我们先分解一下。这个效果。分为3部分,背景(圆角矩形) + 滑动...

2019-06-21 20:20:41 2642 59

原创 C++ QT PC端 防止程序重复启动的几种方式

在做客户端的过程中,我们通常会希望程序实例只运行一次,也就是只希望同时启动一个程序。所以今天就总结一下几种防止程序重复启动的方式:1.使用QT中的QLockFile:QLockFile 使用文件提供在不同的进程间的锁。锁文件可以放置多个进程同时访问同一资源。例如磁盘上的配置文件、套接字、端口、共享内存区域等。使用的时候trylock()对资源进行上锁。当程序运行的时候,上锁成功后,会自动...

2019-06-01 12:06:00 1138

原创 QT 顶级窗口为QWidget 设置顶级窗口背景无效

今天同事遇到一个问题,就是一个很简单的demo。使用Designer创建了一个顶层窗口QWidget,然后右键设置样式表,将背景设置为红色。这时候看起来一切正常,但是运行起来的时候,背景居然没有更改,也就是设置的CSS样式表并没有生效。先看一下问题:1.创建一个叫Form的QWidget窗口。2.右键设置样式表#Form{ background:red;}这时候看起来...

2019-05-22 11:20:30 1187 1

原创 C++ 11 bind function

今天开始逐一学习c++11的新用法,从std::function 与 std::bind函数开始。std::function 是一个template, 在一对<>中指定类型。 std::function<int(int, int)> 表明定义的是一个有两个int类型的参数,并且返回一个int类返回值的函数对象,这个返回的可调用对象可以理解为函数指针。具体用法 std...

2019-04-06 20:14:36 576

原创 QT 多线程 线程池 QRunnalbe QThreadPool

一、背景 QT中线程很早就出现了,多线程的使用目的是为了减轻主线程压力,不至于主线程界面卡顿,提高用户体验。但是线程的创建与销毁需要与系统交互,会产生很大的开销。若需要频繁的创建线程就建议使用线程池,有线程池维护一定数量的线程,当需要进行多线程的运算时,将运算函数传递给线程池即可。线程池会根据可用线程进行任务安排。线程池有什么作用呢?一个作用就是限制系统中执行线程的数量。...

2019-03-19 17:22:22 815

原创 QT C++ 获取文件的crc32

//获取文件的crc32码QString calcFileCRC(QString fileName){ QString strCRC = ""; quint32 crc = 0;; QFile file(fileName); bool result = file.open(QFile::ReadOnly); if(result) { w...

2019-03-12 10:09:44 898

原创 QT windows 应用程序 exe 设置详细信息 解决中文乱码问题

上一篇博客,我们已经了解了使用NSIS进行打包软件,对于生成的安装包的详细信息进行设置。详情见这里windows下使用QT开发,编译生成的exe或者dll,点击右键-属性-详细信息 中都是空的,那么怎么设置生成的文件的详细信息呢?1.新创建一个.rc文件,随意命名,例如叫app.rc 并编辑#include "winver.h"IDI_ICON1 IC...

2019-02-19 10:35:56 711

原创 NSIS 设置安装包exe属性中的详细信息

我们在使用NSIS创建安装包的时候,生成的安装包setup.exe 其 “右键-属性-详细信息” 中的信息是空的,比如:解决问题一:给安装包添加详细信息那么我们怎么设置完成这些信息呢?在.nsi脚本中添加VIProductVersion "${PRODUCT_VERSION}" ;版本号,格式为 X.X.X.X (若使用则本条必须)VIAddVersionKey "Produ...

2019-02-19 09:54:13 1069

原创 QT windows 桌面应用程序增量升级一种方案

讨论升级方案之前,我们先聊一聊增量升级怎么实现,我暂时认为有两种实现方式:1.使用大小版本的实现方式增量包的定义:每次升级,将所有相对于前一个版本更改的文件压缩成一个zip包,即为升级包。  比如当前版本:4.0.0.0。  我们更改了c++的一些功能,只改变了assist.exe.新版本为:4.0.0.1.  那么V4.0.0.1 对比V4.0.0.0的增量就是 assist.exe 一...

2019-02-02 11:23:28 1168 1

原创 QT 错误 Unexpected CDB Exit The CDB process terminated

有时候,我们使用QT开发,在使用Debug模式进行调试,会出现 "Unexpected CDB Exit"  "The CDB process terminated."的错误这个问题,感到莫名其妙,我们尝试重新qmake, 重新构建, 删除所有缓存等等,但都不起什么作用。通过查询资料,我们知道,原来可能是因为缺失依赖库 xxx.dll那么我们怎么确定到底缺失了那个dll呢? 我们需...

2019-01-30 10:16:19 1706

原创 CEF3 命令行 CefCommandLine 所有选项 与 开发中使用的测试网址

1.cef3 commandLine设置在cef3开发过程中,在OnBeforeCommandLineProcessing 函数中,我们可以通过命令行添加一些命令,来对浏览器进行一些设置:void BrowserApp::OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<Ce...

2019-01-25 11:19:55 3044

原创 QT 项目中 配置文件 pro详解

QT 的配置文件.pro 解析:1. 注释:       # 单行注释 2. QT += core gui     QT  -=  gui   新增(+=)或者减去(-=) QT使用的模块,各个模块间使用空格分开。默认会包含 core 与 gui两个模块。 3. TEMPLATE = VALUE模板:   VALUE值有以下选项:app:最终生成的是可执行程...

2019-01-24 20:11:53 1245 4

原创 CEF CEF3支持flash 解决黑框

在我们使用cef的时候,有些网页需要flash来播放,这时候如果我们计算机如果没有安装flashplayerpp 的时候,会出现“该插件不受支持”。这时候我们有两种选择可以解决:1.可以去官网下载安装包https://www.flash.cn/ ,安装完成后,会在C:\Windows\System32\Macromed\Flash 或者 C:\Windows\SysWOW64\Ma...

2019-01-22 19:36:17 1825 3

原创 QT QThread 多线程 用法二

        在上一篇文章中,我们介绍了QThread 的用法一,就是通过moveToThread将一个 继承于QObject的对象移到一个新的线程中执行(只能通过信号槽、事件进行调用才会在多线程中运行)详情请见:https://blog.csdn.net/xiezhongyuan07/article/details/86580080上次我们介绍的那种方法,两个类都是继承于QObject的,...

2019-01-22 17:17:29 309

原创 QT QThread 多线程 用法一

QThread 用法探究一:QT使用moveThread开启多线程:1.创建一个基于QObejct 的类 Controller(在此类中创建多线程的类,并启动多线程)2.创建一个基于QObject 的类Worker; (运行在单独的线程中)3.在Worker类中,创建一个槽函数doWorker(); 用于运行多线程里面的代码,所有耗时的代码全部在这个槽函数里面运行。4.在Con...

2019-01-21 17:57:28 841

原创 QT winsows 应用程序创建dump崩溃日志方法

在我们的程序崩溃的时候,往往是不容易查找运行到哪一步出错了,或者是不容易查找崩溃的原因,这时候我们可以引进windows的api 来进行系统级别的崩溃日志收集,当应用程序崩溃时候自动生成.dump崩溃日志文件。需要头文件#include <Dbghelp.h>定义一个方法static LONG WINAPI exceptionCallback(struct _EXC...

2019-01-15 13:54:30 1096 8

原创 探究一下qDebug() 连续输出 的实现方式

 我们都知道在QT应用程序中,打印结果可以使用qDebug() << “value1” << “value2”那么这究竟是怎么实现的呢? 我们可以在qlogging.h中查看qDebug的定义:#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGE...

2019-01-14 15:32:08 1084 1

原创 c++ operator 关键字

我们都知道C++中的关键字 operator 具有两方面意义operator 作为类的转换函数: 1.解释:将类的对象转换为其他类型。比如说将一个类的对象转换为int类型2.形式:operator <类型>()3.条件:转换函数必须是类的方法 转换函数不能指定返回类型,但是实现方法里需有返回值 转换函数不能有参数例如:class MyClass{...

2019-01-11 14:29:04 1023

原创 git fatal: unable to access  Failed to connect to localhost port 1080: Connection refused

git 拉取、更新子模块失败,提示失败Submodule 'libXesBase' (https://git.xxxxx.com/xesoa/libXesBase.git) registered for path 'libXesBase'Cloning into 'E:/assist/libXesBase'...fatal: unable to access 'https://git.x...

2018-12-10 16:57:17 3266 2

原创 CEF CefSettings 结构体 详解

1. single_process:        设置为ture时,browser和render使用同一个进程。Chromium 不正是支持此运行模式,并且不如默认的多进程稳定。 2. no_sandbox:        沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限。沙盒中的所有改动对操作系统不会造成任何损失。设置为ture(1) ...

2018-11-23 18:57:36 8657 6

翻译 CEF CEF3 常见问题(FAQ)

1. CEF1和CEF3有什么区别?       CEF1使用单进程架构,CEF3使用多进程架构。CEF3的架构与Chrome浏览器非常相似,因此往往具有更好的性能,稳定性和新功能。 2. CEF1需要支持多长时间?    不再支持CEF1。 3. 支持CEF的[某个号码]发布分支多长时间? 4. 我可以使用我的专有应用程序使用和分发CEF吗?    是。CEF...

2018-11-23 10:39:57 1395

原创 cef3 版本号解析

一、 cef3 版本号识别:X.YYYY.A.gHHHHHHH "X" :       cef3的主版本号;  "YYYY" :chrominum 分支号  "A" :       代表当前分支中,提交次数的一个增量。大概相当于svn中的版本号,但以分支为基础,可以帮助用户快速的确认同一分支中的构建顺序。  "gHHHHHHH" :是git提交的哈希值的7个字符。g代表git 二、...

2018-11-20 19:06:05 1146

原创 NSIS 压缩算法、方式 对比

对于安装包打包使用的NSIS,提供了7种压缩方式:ZLIB ZLIB(固实) BZIP2 BZIP2(固实) LZMA LZMA(固实) 极限压缩在脚本中是:SetCompressor [/SOLID] [/FINAL] zlib|bzip2|lzma该命令设置了安装程序压缩文件、数据使用的压缩算法。该命令只能在区段、函数之外或在任何数据被压缩之前使用。不同的压缩方式不能...

2018-11-16 21:50:08 1291

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