WxTextCtrl无法加载大文本

时间:2010-12-23 16:58:08

标签: c++ wxwidgets

我读过一年前在帖子上写的解决方案 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 ++,或者有更好的方法来处理这个问题。谢谢。

编辑: 我使用文本文件的另一个原因是我观察到每当我执行sprintf时[使用行WxRichTextCtrl1-&gt; AppendText(wxT(stat));被评论出来了]电脑开始变慢。

-Ric

1 个答案:

答案 0 :(得分:0)

免责声明:我的答案更多的是替代解决方案。

我不相信在任何情况下,这个应用程序的用户会发现有一个包含大约1600万行数字的滚动文本窗口是有用的。滚动到列表中用户可能需要轻松查看的特定位置是不可能的。这是假设您输出的每个数字当然对用户有一定的意义(您出于某种原因在屏幕上显示它们)。为用户提供控制以查找这些数字的特定,固定(合理)范围将是一个更好的解决方案,不仅在更好的用户体验方面,而且在这里帮助解决您的问题。

另一方面,如果你仍然坚持一个包含所有6400万个数字的单一窗口,那么你似乎有一个非常严格的数据结构,这意味着你可以(并且应该)利用虚拟网格控件( wxGrid),即使有如此大的数据集,也可以顺利运行。用户可能会发现此控件更易于阅读并找到他们正在查找的数据部分。