wxwidgets快速定期数据更新

时间:2014-03-27 20:54:54

标签: c++ wxwidgets

我想使用循环或回调函数在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));
}

编辑:我的意思是像时钟计数器或打印进度一样现场输出(打印,流式传输)数据。使用虚拟样式也不会经常更新它。

2 个答案:

答案 0 :(得分:1)

我不确定代码中的listgrid是什么,但无论如何,这不是你应该怎么做的。一次只能在屏幕上显示30000个项目,那么为什么要设置所有这些项目的值呢?相反,使用&#34;虚拟&#34; wxListCtrl,即wxLC_VIRTUAL样式,或(始终&#34;虚拟&#34;)wxGridwxDataViewCtrl,只需更新您的数据并在项目更改后刷新。 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();
}