- 博客(237)
- 资源 (11)
- 问答 (2)
- 收藏
- 关注
原创 【精华】详解Qt中的内存管理机制
前言内存管理,是对软件中内存资源的分配与释放进行有效管理的方法和理论。众所周知,内存管理是软件开发的一个重要的内容。软件规模越大,内存管理可能出现的问题越多。如果像C语言一样手动地管理内存,一会给开发人员带来巨大的负担,二是手动管理内存的可靠性较差。Qt为软件开发人员提供了一套内存管理机制,用以替代手动内存管理。下面开始逐条讲述Qt中的内存管理机制。一脉相承的栈与堆的内存管理了解C语言的同学都知道,C语言中的内存分配有两种形式:栈内存、堆内存。栈内存栈内存的管理是由编译器来做的,栈上申请的内
2021-08-16 20:00:45 6008
原创 【GUI开发】图像处理类软件的浏览功能实现模型
图像处理软件包括但不限于:图片浏览器,2D地图浏览器、图片编辑器等软件。为了处理大分辨率图片,一般采用GDAL加载图像,GDAL可以动态加载图像的一部分,可以建立图像金字塔,优化加载速度。一般的图像处理软件都需要对加载的图像进行放大、缩小、平移操作。首先明确:放大是指图像细节增加,可见范围减少的一种浏览方式,缩小是指图像细节减少,可见范围增加的一种方式下面介绍如何实现。编写代码前,需要建立图像浏览所使用的观察模型。如下图所示:其中,显示窗口是指用于绘制当前浏览内容的窗口,观察区域是指,
2021-06-27 17:38:26 221 2
原创 【编译原理】二、理解BNF
总体理解一个源码文件本质上就是一棵树,即数据结构中的树。解析源码的本质就是将一维的字符串序列转换为一颗语法树。这个可以自己对着源码理解,代码中的缩进就是一种树层次的体现。BNF范式BNF范式本质上就是树形分解,很简单嘛。前端代码解析的难点就在于BNF,对于对数学不敏感的人来说,看到公式就很烦(像我一样)。那么我们就从计算机专业的角度来掌握它。产生式产生式就是将语法的分解规则表达出来的等式。如句子 = 主 + 谓 + 宾将语法规则描述出来是为了便于代码实现,便于计算,所以产生式可以看做
2021-01-24 11:15:31 19836 3
原创 Qt实现多屏幕多分辨率自适应
最近比较忙,这里仅大概描述一下我的实现思路。运行条件两个屏幕,分辨率不同。Qt软件问题提出前段时间写了一个软件,窗口内有自绘内容。自绘内容里面用的长度单位都是像素。可想而知,在开发者的电脑屏幕上大小都是符合要求的。到这一步都没问题。软件开发完成后发给客户,客户在他的电脑上运行,也没问题,毕竟分辨率差不多。偶然一次使用配有高分辨率显示器电脑运行软件,在4k屏下,软件出现了以下问题:整体尺寸和某些自绘内容(线条形状)变得很小,原因是屏幕分辨率升高了,像素更密集,相同个数的像素长度看起来更
2020-10-14 20:40:34 3882 1
原创 【汇编】思考汇编中的两个基本问题
工作八年有余,已走在向linux内核进发的路上。在学习linux内核之前,心里存有一些侥幸,认为汇编可以跳过去。别人封装好,只管使用即可,反正自己又不一定写。在学习过程中,涉及到汇编的部分都是大致看一下设计思路。但是逐渐地,由于跳过的细节越来越多,书慢慢的就看不懂了。积少成多,窟窿越来越大,量变产生了质变。九年前还在大学学习汇编时,不管是考试还是课程设计,其实都很顺利。但是心里一直对什么时候使用哪个寄存器存在疑惑,编写汇编时,没有十足的把握,都是抱着试一试的心态去完成了课程任务。
2024-12-05 09:40:45 472
原创 【Linux】BIOS,操作系统,应用程序的关系
接口的具体细节,调用流程,可以参考书籍或者官方资料。体系架构是首先要把握住的,架构通,方向才能对,努力才不会白费。
2024-11-25 22:46:37 147
原创 linux相关资源下载地址
fedora系统:https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/9/Fedora/x86_64/iso/
2024-11-18 00:21:53 118
原创 不要在动态链接库接口中,使用C++标准库中的容器
最后求助网络,发现原来C++标准库容器不能用来作为接口的一部分使用。这和模板的跨库问题是同一个问题。最近程序老是崩溃在调用动态库接口的代码附近,经过半天的代码审查,也没有看出来什么门道。
2024-11-14 22:10:00 209
原创 Linux应用及内核开发最佳学习计划
为什么要学习Linux应用及内核开发?第一当然是因为热爱,第二是因为就业待遇高。如果鱼与熊掌皆可兼得,这个工作还有什么可挑剔的呢?Linux系统的内容可以用浩瀚来形容。从哪下手学习,以什么样的路线学习,对初学者来说,是个大问题。本文就作者实际经验而谈,讲一讲我认为的Linux应用及内核开发最佳的学习计划。声明本文不是卖课的文章,请放心阅读。
2024-10-16 12:27:22 418
原创 做项目与做产品有哪些区别?
一般IT公司的生产业务类型主要分为两种,即做项目和做产品。做项目和做产品主要的盈利模式是什么,区别是什么?技术工作者在选择就业机会的时候,如何根据公司的经营模式,来选择更适合自己的公司呢?
2024-10-10 23:36:22 320
原创 设计模式如何理解与记忆
设计模式就是面向对象编程的套路。说真的,不太好记忆。在理解的基础上,记忆会更加容易。设计模式那么多,有的其实基本不会用到。我们其实只要记住大部分常用的即可,人生有限,不常用的东西,真的不要花太多时间,还有很多重要的东西等着学呢!怎么记住大部分设计模式呢?首先要明确,设计模式是面向对象编程的实践经验。所以,设计模式的核心,是对象。这么想方向就对了。带着上面的总体理解,大家可以去看具体的设计模式,相信会有更深的理解。设计模式需要根据使用场景选择性使用,没有必要就不要用,不要硬用。
2024-09-23 20:49:36 449
原创 针对小开发团队用最低成本提高软件质量的软件开发过程建议
对于小开发团队来说,经典的软件开发管理过程,由于时间进度等原因,在实际开发中实施的程度很有限,这就导致了开发团队总是围绕着某一两个核心开发人员进行,团队的效率和优势发挥不出来,团队没有高效协作,最后就变成一盘散沙,专业性提不上来,质量提不上来,逐渐演变成作坊式开发过程。随着时间的推移,项目和工作量的增多,核心开发人员将不堪重负。这不仅效率低下,而且会导致很大的项目风险和管理风险。所以对小开发团队来说,需要量身定制的软件研发过程,开发模型,研发管理体系。这里我总结实践经验,给出几点建议。
2024-09-23 19:26:57 230
原创 【编译原理】总体把握编译原理
这里容易误解的是,根据生成式解析代码的过程中,是需要查看一定的上下文的,因为我们需要根据已经解析的符号,加上后面出现的符号,来判断语句的类型和内容,这个过程本身就是一种上下文分析的过程,只不过这个上下文范围很小。感兴趣的同学可以看我之前的文章。编译器用生成式来对代码进行词法和语法解析,只需要使用生成式约定的规则,就可以从一串文本中,确定一个符合语法的语句后,就可以明确这个语句的含义,不需要这条语句前面的内容(即上文),和下面的内容(即下文)来确定这条语句所表达的含义,也就是说语句所表达的含义不会有歧义。
2024-09-17 16:20:20 300
原创 模板与泛型编程笔记(一)入门篇
从这个角度去看,那么模板就是一个编译期函数,这个函数最原始的用途是在编译器解析后,生成实例化后的代码。后面慢慢发展成了编译期元函数,从而出现了元编程。《C++新经典 模板与泛型编程》难得的很容易看得懂的好书,作者讲技术不跳跃,娓娓道来,只要花点时间就能看懂。
2024-09-10 23:50:25 228
原创 标准库中的锁和Qt的锁对比学习
C++标准库中的锁lock_guard、unique_lock、shared_lock、scoped_lock、recursive_mutexQt中的QMutexLocker相当于unique_lock和recursive_mutex的合体。QReadWriteLock相当于shared_lock。
2024-09-09 22:17:38 223
原创 C++11 atomic和内存序
以上几篇文章看完,基本上就能理解,为什么有内存序这个东西了,我个人理解是为了对某些计算机系统设计不足或者妥协的补丁程序。这一块文章较多,但是鱼龙混杂,这里贴出来比较好的几篇文章。
2024-09-08 22:27:55 308
原创 瀑布开发,RUP,敏捷开发简述
相对瀑布开发模式更加先进,采用增量迭代更能适应变化,以文档为中心。很多开发团队,特别是很多国企性质的开发团队在用。传统的软件开发过程。它将一个软件开发的整个过程分为若干阶段去执行,重文档,严格按照各个阶段的先后顺序去执行。以用例为驱动,以架构为核心的迭代增量开发模式。包含四个大阶段,九个小迭代的细致划分,包含UML等设计工具。迭代速度更快,增量更小,以人为中心。提出了一系列接地气的新的编程活动,很有意思。对阶段的划分和执行过于简单,难以应对变化,以文档为中心。轻文档,重团队交流,能及时应对变化。
2024-09-08 18:30:58 405
原创 Linux应用编程学习记录
文件link系统调用创建硬链接,symlink系统调用用于创建软链接。硬链接相当于强指针,软链接相当于弱指针。标准库IO接口带输入输出缓冲,可以减少系统调用次数,提高效率。而linux系统调用则没有缓冲,可以直接操作设备。linux单个进程打开的文件描述符有个数限制。错误处理errno用于记录系统调用的错误码。它是线程本地变量,POSIX规定其必须是线程安全的,linux中正是如此。strerror用于将errno转为字符串。perror用于向标准输出中打印错误消息,并添加消息前缀。
2024-09-03 23:56:04 223
原创 Linux动态库搜索路径相关知识文章
Linux -L, -l, -rpath, -rpath-link, LD_LIBRARY_PATH和RUNPATH使用说明
2024-08-31 12:54:28 184
原创 Qt Creator代码片段
/********************************************************************************* @brief :** @author : pivot** @date : %{CurrentDate:yyyy-MM-dd} %{CurrentTime:hh:mm}*****************************************************************
2024-07-13 16:04:22 137
原创 IT从业者对理性上网的十条建议
1. 警惕双面人某些网红,表面上是爱国人士,其实背地里,爱国是工作,赴美是生活。某些网红,表面上是为打工人发声,其实在获得流量和金钱以后,成立公司背地里剥削打工人。网上的东西不要听了就信了,一码归一码,就算一个人说得句句在理,满口仁义道德,也不能代表这个人就是高尚的人。网红明星“塌房”已经随处可见了,不要只看一个人说的,要看他做的。如果看不到他做的,就不要盲目崇拜。2. 不要做二极管世界上的事情不是只有对和错,不是只有好与坏,这只是一种简化的认知模式,或者说应试教育下的思维方式。这种思维方式下
2024-06-01 11:36:21 745 1
原创 使用request-try-notifyState流程实现UI控制与状态反馈的完整闭环
在Qt编程时,我们经常会在界面上添加一些按钮,当按钮被点击时,执行某段代码,例如显示一个对话框、关闭窗口,保存文件等等。这种由UI控件触发某种信号,通过信号槽触发目的代码执行的场景非常多。这种场景下,通常不需要关注目的代码的执行结果,仅仅通过信号触发槽即可完成任务。我们可以用两个单词来描述上述功能场景,即 request-do,即 UI 发出操作请求,触发代码执行。
2024-05-04 10:43:37 627
原创 关注公众号永久免费使用!跨平台软件“批量哈希大师“发布
由本公众号开发的校验和/哈希值计算工具正式发布。批量哈希大师是本公众号原创开发的第一款基于Qt的跨平台工具软件,也是本公众号对跨平台免费软件生态的发展做出的一份努力。作为软件开发人员,我们会经常使用哈希工具来校验文件内容是否被篡改。但我们经常遇到的一个问题是,很难找到一款能够支持跨平台,支持批量计算并长期维护改进的免费软件。批量哈希大师正是为了满足以上需求而被开发出来。
2024-04-19 00:09:35 367
原创 Qt小型项目模板
我们每次通过Qt Creator新建的项目,其目录结构都比较简单。通常情况下,我们都要重新创建常用的源码目录结构,这种做法含有较多的重复劳动,费时费力。同时,笔者发现,每个人创建的项目的源码目录结构,相比之下差异很大。因为每个人对解决某一问题有自己的想法和视角,所以组织代码的方式也不一样。但是,个性抽象的代码组织方式,可能会导致项目协作、项目维护上出现沟通问题。对于小型项目,采用常用的源码组织方式,建立通用项目模板,不仅可以提高效率,同时可以使源码结构更加清晰,提高项目的可维护性。
2024-04-13 10:49:30 348
原创 Qt桌面GUI软件基础测试参考手册V0.0.1发布
下载地址:https://gitee.com/pivotfuture/qt_gui_software_base_test_reference_manual/releases/tag/V0.0.1。本测试手册旨在指导开发者、测试人员,对Qt桌面GUI程序进行软件基础功能测试,帮助减少程序低级别的错误和BUG。一旦您的提议被采纳,您的名字将被写入到贡献者致谢列表中。开发者使用此手册,可以实现在开发阶段对所开发程序进行基础自测,减少程序 bug 数量,减少因排查问题而耗费的时间精力和资金成本。
2024-04-10 23:14:29 454
原创 【三维】关于万向节锁的直白解释
但是如果用机械部件去真正的控制物体的姿态,一般就是用万向节这种机械部件,它本身有bug。为啥,因为万向节的旋转方向之间是有连接的,连接就是限制。在万向节的限制下,想要旋转物体到一定姿态,如果还按照先转a,再转b,最后转c,最后可能在某个位置卡住了,无法旋转。这种状态就是“万向节”锁住了。卡住的位置是在两个或者多个旋转平面重合的时候,就会消失一个旋转自由度。现实世界中,我们想把一个物体摆一个姿态,其实就是先转a,再转b,最后转c。用大脑去想象的话,很简单,完全不会有问题。这是简单问题复杂化的典型代表。
2024-03-31 13:23:17 426
原创 【3ds max笔记】理解三维场景的浏览方式与操作方法
初学3ds max,很容易会被它的浏览方式搞晕,或者想移动物体,切换观察角度,而不知道怎么操作。其实只要梳理一下,就会变得简单。玩这个软件,容易被各种按钮,菜单搞晕。我们学习的时候必须要按模块去学习,其中浏览与操作是基本功,需要梳理明白,不然会学得一头雾水。
2024-03-23 10:01:36 537
原创 【Qt基本功修炼】Qt线程的两种运行模式
QThread是Qt中的线程类,用于实现多线程运行。QThread有两种工作模式,即消息循环模式无消息循环模式两种模式分别适用于不同的场景。下面我们将从多个方面,讲解QThread两种工作模式的区别。在项目中,我们需要根据实际需求选择正确的线程运行模式,合理地实现软件功能,同时提高导致软件的稳定性和可靠性。以上是Qt线程的基本使用方法,可以满足基本的使用需求。但用起来还是稍显麻烦。
2024-02-01 21:27:23 1798
原创 【Git不走弯路】(二)提交与分支的本质
提交与分支是Git中两个基本对象,对初学者而言需要花些时间理解。正如我们之前所说,计算机中很多新概念是新瓶装旧酒。计算机技术来源于需求,服务于需求,需求是计算机技术的出发点和落脚点。梳理清楚工程实践中,版本管理工作的每个需求点和细节,就能摸清Git的来龙去脉。没有魔法,提交与分支的本质就是文件夹。后续文章中,我们将以“文件夹”的思路形象分析Git中的基本操作的具体含义,敬请关注!本文原创发布于Qt未来工程师。
2024-01-21 01:31:52 1029
原创 使用VS2015在win7 x64上编译调试FFmpeg(附源码和虚拟机下载)
在文章《使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)》中,我们在win10+VS2017的环境下基于开源项目ShiftMediaProject完成了FFmpeg源码调试环境的配置。在win7+VS2015的环境下,ShiftMediaProject配置过程和win10+VS2017下类似,但编译问题会更多一些。经过一番排查,将编译问题解决后,即可进行源码调试。原因是代码中检测了系统类型,win7系统下,没有此结构的定义,相关函数也不会被使用。
2024-01-14 21:59:31 604
谁能来打消我的忧虑??
2014-10-18
在别的地方弹出的系统菜单点击菜单项没有反应?
2014-09-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人