当前位置: 首页 > news >正文

网站建设投票系统设计做交流网站

网站建设投票系统设计,做交流网站,百度信息流是什么,建设银行四川分行网站最近研究了下如何用qt的原生控件来加载和显示大文件#xff08;1G#xff09;#xff0c;分享下一些摸索经验。下文源码#xff1a;compilelife/loginsight​github.com文件的内存映射在开始qt部分之前#xff0c;我们先了解一个概念——文件的内存映射。我们知道一般…最近研究了下如何用qt的原生控件来加载和显示大文件1G分享下一些摸索经验。下文源码compilelife/loginsight​github.com文件的内存映射在开始qt部分之前我们先了解一个概念——文件的内存映射。我们知道一般读文件用到的API是fopen/fread/fclose或者是open/read/close这种方式都需要内核帮忙作一次拷贝。linux中有一个函数叫mmapwindows也有类似功能可以避免这样的一次拷贝。请看这幅对比图图片来源https://www.jianshu.com/p/eece39beee20当我们用fread/read时都是触发了一个步骤1的read系统调用然后内核帮忙到磁盘中把请求的文件内容读取到kernnel buffer然后再copy回用户进程空间。相比如果用mmap一开始内核就把整个文件映射到了用户进程的虚拟内存中映射过程只是分配了地址空间并没有拷贝内存所以速度快。这一段地址空间在代码层面看到的就是一块连续的内存当代码访问这块内存如果引发缺页异常内核就会加载文件内存到buffer。这样就减少了一次内存拷贝。使用mmap对于大文件的加载和显示有什么好处呢读取速度快可以把整个文件当做代码中一个连续内存区域直接以const char*访问即可以透明地认为整个文件已经加载到进程内且保存为一个字符串指针了。对于代码设计而言较方便。mmap参考资料 https://www.jianshu.com/p/eece39beee20https://zhuanlan.zhihu.com/p/69555454Qt里显示大文件在Qt里QFile::map提供了跨平台的“文件内存映射”支持。所以通过调用QFile::map就可以把文件“加载”为一个const char*字符串使用。我们知道在 QPlainTextEdit里显示文本一般可以用setPlainText。如果直接把map后的内存传递给setPlainText会导致文件的所有内容被读入内存这显然是不行的。一般对大文件处理方式是“分页”也就是一次只加载部分内容。为了让用户感知不到文件被“分页”了我们需要处理下自动加载分页的内容。具体的做法监听滚动事件自动加载下一个/上一个分页隐藏滚动条用外部滚动条替代外部滚动条对应整个文件范围并保持实时同步思路在开始实现前我们最好有一个清晰的思路可以建个简单的模型 这里我们把窗口可视区想象成一个固定高度的滑块整个滑块可以在整个文件从头滑动到尾部——对应用户从第一行拉动滚动条右侧灰色箭头直到最后一行。为了能减少滚动过程中频繁触发读取文件可以设置一块预加载区域比可见区域大。每次可见区域要滑出预加载区的时候就触发一次预加载区的预读。在实现上预加载区域对应的就是setPlainText加载的内容而可见区域的滚动就直接由QPlainText代为实现了。于是要实现大文件的加载和显示只要 1. 预读内容通过setPlainText到QPlainTextEdit 2. 处理QPlainTextEdit的滚动事件在即将滚出预读区的时候更新预读区当然说起来容易做起来还是要处理一些琐碎事务的。详见https://github.com/compilelife/loginsight/blob/master/src/logtextedit.cpp再谈文件的内存映射当然如果只是单纯地去显示一个大文件 直接用常规的文件读写API也是可行的。map的优势还不够明显。实际上map在这个场景里真正强大的地方是在于把文件当做“已经加载好的连续字符串”。在加载了大文件后不可避免地需要做查找、定位等逻辑这时使用map可同时优化效率和代码可读性。比如我们要在上面工作的基础上做全文搜索并定位到匹配行。这时QPlainText的find因为只能搜索预加载内容无法使用。而基于map只需要对map后的内存地址执行strstr按字符串查找再把查找到的位置前后内容载入可视区即可。总结为了基于qt原生控件去高效地显示大文件我们用了不少奇技淫巧把QPlainTextEdit伪装成了支持大文件的文本框。也许下一步可以试试看用QPlainTextDocumentLayout实现自定义文本框作更深入地优化。
http://www.zqtcl.cn/news/901516/

相关文章:

  • 自己建网站做app手机网站列表页源码
  • 企业网站模板seo网站建设关键词优化
  • 平面毕业设计作品网站推广普通话ppt
  • p2p网站开发思路方案免费建简单网站
  • 微信朋友圈的网站连接怎么做互联网工程有限公司
  • 高大上企业网站优秀的门户网站
  • 做seo对网站推广有什么作用自己做电商网站吗
  • 网站从哪些方面来做泉州网页搜索排名提升
  • 网站建设可以给公司带来想做网站开发兼职
  • 天津市免费建站精美大气的餐饮类企业网站
  • 购物网站那个信用好又便宜手机模板的网站
  • 建筑企业资质查询网站怎么查网络服务商
  • 汉川市城乡建设局网站企业销售网站建设
  • 梅州建设网站域名购买流程
  • 单页网站与传统网站的区别wordpress对接微信
  • 做公司网站深圳旅游
  • 最好企业网站网站建设 的销售图片
  • 怎么创建网站 免费滴做网站算运营吗
  • 廊坊网站建设-商昊网络正规网站优化推广
  • 网站建设拍金手指排名贰贰安装wordpress数据库错误
  • 食品网站建设需求分析购物app大全
  • 电商美工广州seo技术外包公司
  • 重庆旅游seo整站优化深圳宝安区是富人区吗
  • 网站开发验收模板网站欧美风格
  • 自己做发卡网站什么是网络设计制作
  • 如何搭建一个公司网站互联网推广怎么找客户
  • 江苏同隆建设集团有限公司网站asp.net新建网站
  • 爱站网挖掘工具小程序网站开发怎么样
  • 网站文章批量上传工具自己制作免费网站
  • 凡科快速建站建设网站遇到问题的解决方案