<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近使用QT中的QTextEdit控制元件,作為實時資料顯示的UI,在一次寫入超過多少k的時候迴圈寫入則會卡頓,網上也沒有什麼好的解決方案,左思右想自己實現一個類似的demo。後期封裝起來繼承QWidget就可以在其他地方應用,直接上圖:
主要功能介紹:
1、這裡用一個6M多的檔案加一個定時器100ms模擬實時資料,可以 自定義儲存多少資料,預設是儲存10M資料;
2、行號的顯示和隱藏;
3、右側卷軸可以檢視儲存的資料;
4、支援巨量資料的儲存實時重新整理。
QT自帶的QTextEdit在一次顯示K以上級別的還是可以的,但是一次性讀入上M資料基本上就會卡死,如果在實時監測資料,這個控制元件基本不能使用(少量資料是可以的)。目前的思路是分頁顯示:
上述自定義的TextEdit其實由1、QTextEdit(作為行號)+2、QTextEdit(主內容)+3、scrollbar組成拼接的一個UI。
1、1和2自動顯示的水平和豎直的卷軸,將3卷軸與其訊號產生關聯(有訊號)
2、設定當前顯示的區域的最大列數和每一行最大位元組數(這樣就可以知道顯示多少位元組數了);
3、設定一個快取來儲存收到的內容,範例用了一個10M的QString來儲存資料,每次來資料就去偏移,這個快取就是為了暫存。
4、顯示區域只顯示設定的最大列數,實際設定為100列足夠佔滿顯示區域每次點選右側卷軸最上或者最下小倒三角就自動翻頁(翻頁的大小也是固定的,從快取找相應的位置)
所以說即使是6M資料,顯示的只是最後100行資料,在實時重新整理的時候不會卡介面,如果想要檢視之前的資料,只需要向上翻頁,從快取讀取顯示出來,使用者體驗還是蠻好的。
這個快取我想了很久,最後直接用一個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); }
程式碼如下(範例):
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++)); }
用了一個遞迴,感覺不是太好。
1、因為儲存的都是為QString,實際過程可能char用的多,這個需要轉換,同時顯示HEx也需要轉換;
2、行號其實是有上限,這個上限就是最大容量除以每一行最大位元組數,但是沒有設定;
3、需要需要優化的部分翻頁功能應該讓右側滑動條到最上或者最下自動去載入資料,可能體驗更好;
在實現功能之前,自己試驗了好幾種方法,包括多執行緒,後來發現時頻繁的載入巨量資料介面才會卡死,UI互動部分在主執行緒操作,所以保證資料量在可視的範圍就好,無需一次載入太多資料。
QT是個好的ide,目前已經6版本,支援更高階的C++和更好的特性,在應用方面還需要自己更具實際需要好好的揣摩。
到此這篇關於QT自定義QTextEdit實現巨量資料的實時重新整理顯示功能的文章就介紹到這了,更多相關QT自定義QTextEdit實時重新整理顯示內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45