WXWidgets TextCtrl 或 RichTextCtrl
WXWidgets TextCtrl or RichTextCtrl
我正在使用 wxWidgets 记录一个运行数小时的软件 window。日志可以累积 10,000 个条目。社区是否有关于在使用这么多行更新 textctrl 或 richtextctrl 时如何不让 GUI 线程阻塞很多秒的建议?我愿意使用任何一种控件类型,但 richtext 比我可以突出显示警告或错误更可取。
它目前设置为只读,因此无法进行撤消、重做、粘贴等操作。我目前在添加内容之前和之后对其进行冷冻和解冻。
在一个测试用例中,我在文本控件中添加了 10000 行,前后进行了冻结和解冻。此操作仍需要一分多钟。这些文本控件是否根本无法处理长内容?
假设您的显示就像一个日志,其中每个 "line" 都是它自己的条目,请尝试使用 "virtual mode" 中的 wxListCtrl
。基本上,您将数据保存在您自己的控件中(向量、数组,任何有效的),控件只要求您提供当前可见的数据。
用您自己的 class 继承 wxListCtrl
并实施 OnGetItem
。当一行可见时,您的派生控件将为每一行(如果您实现多列,则为每一列)调用此方法,并为其提供该行的数据,直接从您的数组(列表、向量等)访问.
更多信息可在此处的 wxWidgets 文档中找到:http://docs.wxwidgets.org/3.0/classwx_list_ctrl.html#a92370967f97215e6068326645ee76624
在@avariant 答案中使用 wxListCtrl
的建议是一个很好的建议,但是带有 wxTE_RICH
样式的 wxTextCtrl
仍然能够在远小于分钟,如果你 freeze/thaw 它 before/after。我很想知道您是否可以在 wxWidgets 附带的文本示例中重现该问题(它已经有一个菜单项执行类似的操作),如果可以,您使用哪个 wxWidgets 端口。
我正在使用 wxWidgets 记录一个运行数小时的软件 window。日志可以累积 10,000 个条目。社区是否有关于在使用这么多行更新 textctrl 或 richtextctrl 时如何不让 GUI 线程阻塞很多秒的建议?我愿意使用任何一种控件类型,但 richtext 比我可以突出显示警告或错误更可取。
它目前设置为只读,因此无法进行撤消、重做、粘贴等操作。我目前在添加内容之前和之后对其进行冷冻和解冻。
在一个测试用例中,我在文本控件中添加了 10000 行,前后进行了冻结和解冻。此操作仍需要一分多钟。这些文本控件是否根本无法处理长内容?
假设您的显示就像一个日志,其中每个 "line" 都是它自己的条目,请尝试使用 "virtual mode" 中的 wxListCtrl
。基本上,您将数据保存在您自己的控件中(向量、数组,任何有效的),控件只要求您提供当前可见的数据。
用您自己的 class 继承 wxListCtrl
并实施 OnGetItem
。当一行可见时,您的派生控件将为每一行(如果您实现多列,则为每一列)调用此方法,并为其提供该行的数据,直接从您的数组(列表、向量等)访问.
更多信息可在此处的 wxWidgets 文档中找到:http://docs.wxwidgets.org/3.0/classwx_list_ctrl.html#a92370967f97215e6068326645ee76624
在@avariant 答案中使用 wxListCtrl
的建议是一个很好的建议,但是带有 wxTE_RICH
样式的 wxTextCtrl
仍然能够在远小于分钟,如果你 freeze/thaw 它 before/after。我很想知道您是否可以在 wxWidgets 附带的文本示例中重现该问题(它已经有一个菜单项执行类似的操作),如果可以,您使用哪个 wxWidgets 端口。