Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WXTEXTCRL无法加载大文本_C++_Wxwidgets - Fatal编程技术网

C++ WXTEXTCRL无法加载大文本

C++ WXTEXTCRL无法加载大文本,c++,wxwidgets,C++,Wxwidgets,我在一年前的一篇博文中读到了关于解决方案的文章 现在我有了一个windows应用程序,它将生成保存在3D阵列中的颜色频率统计信息。这是我的代码的一部分,您将在下面的代码中看到,统计数据的打印依赖于指定阈值的滑块 作废项目1fRM::WxButton2Click(wxCommandEvent&事件) { charstat[32]=“”; int***report=pGLCanvas->GetPixel(); float max=pGLCanvas->GetMaxval(); float dist

我在一年前的一篇博文中读到了关于解决方案的文章

现在我有了一个windows应用程序,它将生成保存在3D阵列中的颜色频率统计信息。这是我的代码的一部分,您将在下面的代码中看到,统计数据的打印依赖于指定阈值的滑块

作废项目1fRM::WxButton2Click(wxCommandEvent&事件) {

charstat[32]=“”;
int***report=pGLCanvas->GetPixel();
float max=pGLCanvas->GetMaxval();
float dist=WxSlider5->GetValue();
WxRichTextCtrl1->清除();
WxRichTextCtrl1->SetMaxLength(100);
如果(距离>0)
{    
WxRichTextCtrl1->AppendText(wxT(“Statistics\nR\tG\tB\t\n”);
对于(int m=0;mLoadFile(“histordata.txt”);
}

<>我已经尝试过的解决方案是,当我打印所有的统计数据时,我会从文本文件中获得它,而不是通过3D数组……我想问一下,分割的Python实现是否可以移植到C++上,或者有更好的方法来处理这个问题。谢谢。 编辑: 我改用文本文件的另一个原因是,我观察到每当我只使用sprintf时(使用WxRichTextCtrl1->AppendText(wxT(stat));被注释掉),计算机就会开始减速


-Ric

免责声明:我的答案与其说是解决方案,不如说是替代方案

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

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

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");