WXWidgets TextCtrl或RichTextCtrl

时间:2018-04-09 17:34:57

标签: c++ wxwidgets

我使用wxWidgets作为运行数小时的软件的日志窗口。日志可以累积10,000个条目。在使用这么多行更新textctrl或richtextctrl时,社区是否有建议如何不让GUI线程阻塞make秒?我打开使用任何一种控件类型,但我更喜欢使用richtext来突出显示警告或错误。

它目前设置为只读,因此撤消,重做,粘贴等不活动。我现在在添加内容之前和之后冻结和解冻它。

在一个测试用例中,我在文本控件中添加10000行,并在之前和之后进行冻结和解冻。此操作仍需要一分钟。这些文本控件是否根本无法处理长内容?

2 个答案:

答案 0 :(得分:1)

假设您的显示类似于日志,其中每个“行”都是自己的条目,请尝试在“虚拟模式”中使用wxListCtrl。基本上,您将数据保存在您自己的控件中(矢量,数组,无论什么工作),控件只会询问您当前可见的数据。

使用您自己的类继承wxListCtrl并实施OnGetItem。当一行可见时,派生控件将为每一行调用此方法(如果实现多列,则为每一列调用),并为其提供该行的数据,直接从数组中访问(list,vector,whatever)

此处的wxWidgets文档中提供了更多信息:http://docs.wxwidgets.org/3.0/classwx_list_ctrl.html#a92370967f97215e6068326645ee76624

答案 1 :(得分:0)

在@avariant回答中使用wxListCtrl的建议很好,但wxTextCtrl wxTE_RICH样式仍然能够在不到一分钟的时间内追加10000行你在之前/之后冻结/解冻它。我很想知道你是否可以在wxWidgets附带的文本示例中重现问题(已经有一个类似这样的菜单项),如果是,你使用哪个wxWidgets端口。