1. 程式人生 > 其它 >Duilib - RichEdit作為日誌輸出控制元件,更新日誌內容後並自動跳到最後一行

Duilib - RichEdit作為日誌輸出控制元件,更新日誌內容後並自動跳到最後一行

技術標籤: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,更多幹貨!