10 漫步繁华街

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 6k+

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

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

2020-03-27 19:11:19

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

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

2020-03-06 18:26:00

C++ 实现高性能内存池

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

2020-03-05 17:54:42

深入探究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

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

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

2019-12-25 18:48:59

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

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

2019-12-20 14:58:50

C++ 内存模型

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

2019-12-13 15:28:30

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

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

2019-10-16 14:54:04

C++ QT内存泄漏总结

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

2019-10-15 11:13:56

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

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

2019-10-05 12:39:36

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

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

2019-08-05 18:13:29

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

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

2019-07-29 18:18:23

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

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

2019-07-24 14:22:23

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

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

2019-06-21 20:20:41

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

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

2019-06-01 12:06:00

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

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

2019-05-22 11:20:30

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

QT 多线程 线程池 QRunnalbe QThreadPool

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

2019-03-19 17:22:22

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

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

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

2019-02-19 10:35:56

查看更多

勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享宗师
    分享宗师
    成功上传21个资源即可获取