我想使用循环或回调函数在wxwidgets中更新列表的行或网格单元格,该函数在一秒钟内被调用10次。但应用程序会等到循环的最后一次运行,然后显示最后一个值。我尝试过refresh()和ForceRefresh(),但它不起作用。我怎么能实现这个目标呢?
for(int i=0; i< 30000; i++) {
list->SetItem(itemIndex, 0, wxString::Format(wxT("%i"),i));
//grid->SetCellValue( 0, 0, wxString::Format(wxT("%i"),i));
}
编辑:我的意思是像时钟计数器或打印进度一样现场输出(打印,流式传输)数据。使用虚拟样式也不会经常更新它。
答案 0 :(得分:1)
我不确定代码中的list
和grid
是什么,但无论如何,这不是你应该怎么做的。一次只能在屏幕上显示30000个项目,那么为什么要设置所有这些项目的值呢?相反,使用&#34;虚拟&#34; wxListCtrl
,即wxLC_VIRTUAL
样式,或(始终&#34;虚拟&#34;)wxGrid
或wxDataViewCtrl
,只需更新您的数据并在项目更改后刷新。 GUI控件将尽可能快地显示可见项目 的更新值。
答案 1 :(得分:0)
我从wxWidgets IRC那里得到了完整的答案。我应该在更新之前刷新。
for(int i=0; i< 30000; i++) {
list->SetItem(itemIndex, 0, wxString::Format(wxT("%i"),i));
//grid->SetCellValue( 0, 0, wxString::Format(wxT("%i"),i));
MyFrame::Refresh();
MyFrame::Update();
}