Duilib - RichEdit作為日誌輸出控制元件,更新日誌內容後並自動跳到最後一行
阿新 • • 發佈:2020-12-22
技術標籤:DuilibRichEdit自動換行自動跳轉最後一行
1 編寫介面xml
在介面xml中的需要新增日誌顯示的位置新增以下程式碼:
<RichEdit name="RichEdit_Log" text="日誌控制元件" multiline="true" vscrollbar="true" autovscroll="true" readonly="true"/>
設定RichEdit允許多行,文字只讀,自動設定垂直滾動條。
2 RichEdit控制元件更新內容後跳轉到最後一行
2.1 bug版本程式碼
最開始有問題的版本程式碼如下:
m_RichEditUI->SetText(allLogStr.c_str());
m_RichEditUI->SetTextColor(0xFF000000);
m_RichEditUI->LineDown();
這個寫法有個bug,就是程式第一次啟動之後,更新日誌,當日志越來越多時,RichEdit不會自動跳到最後一行,必須先點選下RichEdit控制元件,才會正常的跳轉到最後一行。
2.2 修改後的程式碼
在經過很多試驗之後,將上述程式碼進行以下修改:
m_RichEditUI->SetText(allLogStr. c_str());
m_RichEditUI->SetTextColor(0xFF000000);
m_RichEditUI->LineDown();
m_RichEditUI->LineScroll(m_RichEditUI->GetLineCount() - 1);
m_RichEditUI->NeedUpdate();
m_RichEditUI->Invalidate();
加上了:
m_RichEditUI->LineScroll(m_RichEditUI->GetLineCount() - 1);
強制將滾輪設定為最後一行。
然後使用:
m_RichEditUI- >NeedUpdate();
m_RichEditUI->Invalidate();
對控制元件進行強制更新。
最終的效果如下圖所示:
如果有興趣,可以訪問我的個站:https://www.stubbornhuang.com,更多幹貨!