文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

QT如何自定义QTextEdit实现大数据的实时刷新显示功能

2023-06-30 16:49

关注

这篇“QT如何自定义QTextEdit实现大数据的实时刷新显示功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“QT如何自定义QTextEdit实现大数据的实时刷新显示功能”文章吧。

前言

最近使用QT中的QTextEdit控件,作为实时数据显示的UI,在一次写入超过多少k的时候循环写入则会卡顿,网上也没有什么好的解决方案,左思右想自己实现一个类似的demo。后期封装起来继承QWidget就可以在其他地方应用,直接上图:

QT如何自定义QTextEdit实现大数据的实时刷新显示功能

主要功能介绍:

这里用一个6M多的文件加一个定时器100ms模拟实时数据,可以 自定义保存多少数据,默认是保存10M数据;

行号的显示和隐藏;

右侧滚动条可以查看保存的数据;

支持大数据的保存实时刷新。

一、 思路

QT自带的QTextEdit在一次显示K以上级别的还是可以的,但是一次性读入上M数据基本上就会卡死,如果在实时监测数据,这个控件基本不能使用(少量数据是可以的)。目前的思路是分页显示:

QT如何自定义QTextEdit实现大数据的实时刷新显示功能

上述自定义的TextEdit其实由1、QTextEdit(作为行号)+2、QTextEdit(主内容)+3、scrollbar组成拼接的一个UI。

1和2自动显示的水平和竖直的滚动条,将3滚动条与其信号产生关联(有信号)

设置当前显示的区域的最大列数和每一行最大字节数(这样就可以知道显示多少字节数了);

设置一个缓存来存储收到的内容,示例用了一个10M的QString来存储数据,每次来数据就去偏移,这个缓存就是为了暂存。

显示区域只显示设置的最大列数,实际设置为100列足够占满显示区域每次点击右侧滚动条最上或者最下小倒三角就自动翻页(翻页的大小也是固定的,从缓存找相应的位置)

所以说即使是6M数据,显示的只是最后100行数据,在实时刷新的时候不会卡界面,如果想要查看之前的数据,只需要向上翻页,从缓存读取显示出来,用户体验还是蛮好的。

二、关键部分代码

1.缓存

这个缓存我想了很久,最后直接用一个QString来做

代码如下(示例):

  mwarehouse.fill(QChar(),10*1024*1024);

移位部分代码

void MainWindow::setDataToHouse(QString &str){    int Maxsize = mwarehouse.size();    if(str.size()>=Maxsize)    {        mwarehouse= str;        return;    }    QString test = mwarehouse.mid(str.size(),-1);    mwarehouse.replace(0,Maxsize-str.size(),mwarehouse.mid(str.size(),-1));    mwarehouse.replace(Maxsize-str.size(),str.size(),str);}

2.滚动部分代码

代码如下(示例):

void MainWindow::showScrollContent(bool up){    int Maxsize = mwarehouse.size();    uint tmpsize = getScrollshowAreaSize();    uint cursize = mtextedit->toPlainText().size();    if(up)    {        if(cyclesnum<mlinenum){return;}        mupnum+=tmpsize;        cyclesnum-=  (mlinenum*2-1);    }    else{        if(mupnum<tmpsize)        {           mupnum=0 ;           return;        }        mupnum-=cursize;    }    QString allowString = mwarehouse.mid(Maxsize-tmpsize-mupnum,tmpsize);    showString(allowString);}

根据每一行最大字节数显示数据

void MainWindow::showString(QString mess,bool cyc ){        if(cyc)        {            uint cycles = (mess.size())/(mlinenumsize);            qDebug()<<"!!!!!"<<cycles;            if(cycles>0)            {                for (uint i = 0;i<cycles ;++i ) {                    showAllString(mess.mid(i*mlinenumsize,mlinenumsize));                }                mess = mess.mid(cycles*mlinenumsize,mess.size()-cycles*mlinenumsize);            }        }        mtextedit->append(mess);        ui->tb_linenum->append(QString::number(cyclesnum++));}

用了一个递归,感觉不是太好。

三、需要优化的地方

因为保存的都是为QString,实际过程可能char用的多,这个需要转换,同时显示HEx也需要转换;

行号其实是有上限,这个上限就是最大容量除以每一行最大字节数,但是没有设置;

需要需要优化的部分翻页功能应该让右侧滑动条到最上或者最下自动去加载数据,可能体验更好;

以上就是关于“QT如何自定义QTextEdit实现大数据的实时刷新显示功能”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯