一年前,我在wx.TextCtrl.LoadFile()的一篇文章中读到了这个解决方案
现在我有了一个windows应用程序,它将生成保存在3D数组中的颜色频率统计数据。这是我的代码的一部分,您将在下面的代码中看到,统计数据的打印依赖于指定阈值的滑块。
void Project1Frm::WxButton2Click(wxCommandEvent& event) {
char stat[32] ="";
int ***report = pGLCanvas->GetPixel();
float max = pGLCanvas->GetMaxval();
float dist = WxSlider5->GetValue();
WxRichTextCtrl1->Clear();
WxRichTextCtrl1->SetMaxLength(100);
if(dist>0)
{
WxRichTextCtrl1->AppendText(wxT("Statistics\nR\tG\tB\t\n"));
for(int m=0; m<256; m++){
for(int n=0; n<256; n++){
for(int o=0; o<256; o++){
if((report[m][n][o]/max)>=(dist/100.0))
{
sprintf(stat,"%d\t%d\t%d\t%3.6f%%\n",m,n,o,report[m][n][o]/max*100.0);
WxRichTextCtrl1->AppendText(wxT(stat));
}
}
}
}
}
else if(dist==0) WxRichTextCtrl1->LoadFile("histodata.txt");}
到目前为止,我尝试过的解决方案是,当我要打印所有统计数据时,我将从文本文件中获得它,而不是通过3D数组……我想问一下,分割的Python实现是否可以移植到C++上,或者有没有更好的方法来处理这个问题。谢谢。
编辑:我使用文本文件代替的另一个原因是,我观察到,每当我使用行WxRichTextCtrl1->AppendText(wxT(Stat);被注释掉时,计算机开始变慢。
-Ric
发布于 2011-01-21 00:10:36
免责声明:我的答案更多的是一种替代而不是一种解决方案。
我不相信有任何情况下,这个应用程序的用户会发现有一个滚动文本窗口包含大约1600万行数字是有用的。不可能滚动到用户可能需要容易地看到的列表中的一个特定位置。这都是假设您在这里输出的每个数字对用户都有一定的意义(您在屏幕上显示它们是有原因的)。为用户提供控件来查找这些数字的特定、固定(合理)范围将是一个更好的解决方案,这不仅是为了获得更好的用户体验,也是为了帮助您解决这里的问题。
另一方面,如果您仍然坚持一个窗口包含所有6400万个数字,那么您在这里似乎有一个非常严格的数据结构,这意味着您可以(也应该)利用虚拟网格控件(wxGrid),它旨在即使处理像这样的超大数据集也能顺利工作。用户可能会发现这个控件更容易阅读和找到他们正在寻找的数据部分。
https://stackoverflow.com/questions/4520825
复制相似问题