我使用wxWidgets作为运行数小时的软件的日志窗口。日志可以累积10,000个条目。在使用这么多行更新textctrl或richtextctrl时,社区是否有建议如何不让GUI线程阻塞make秒?我打开使用任何一种控件类型,但我更喜欢使用richtext来突出显示警告或错误。
它目前设置为只读,因此撤消,重做,粘贴等不活动。我现在在添加内容之前和之后冻结和解冻它。
在一个测试用例中,我在文本控件中添加10000行,并在之前和之后进行冻结和解冻。此操作仍需要一分钟。这些文本控件是否根本无法处理长内容?
答案 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端口。