WxTextCtrl не может загрузить большие тексты - PullRequest
0 голосов
/ 23 декабря 2010

Я читал о решении, написанном здесь в посте год назад 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-> AppendText (wxT (stat));был закомментирован] компьютер начинает замедляться.

-Ric

1 Ответ

0 голосов
/ 20 января 2011

Отказ от ответственности: Мой ответ - скорее альтернатива, чем решение.

Я не верю, что есть какая-то ситуация, в которой пользователь этого приложения сочтет полезным иметь прокручиваемое текстовое окносодержащий ~ 16 миллионов строк чисел.Было бы невозможно прокрутить одно конкретное место в списке, которое пользователю может понадобиться легко увидеть.Все это предполагает, что каждое число, которое вы выводите здесь, имеет определенное значение для пользователя, конечно (вы показываете их на экране по причине).Предоставление пользователю элементов управления для поиска конкретных, фиксированных (разумных) диапазонов этих чисел будет лучшим решением не только с точки зрения улучшения взаимодействия с пользователем, но и поможет решить вашу проблему здесь.

С другой стороны, если вы все еще настаиваете на одном единственном окне, содержащем все 64 миллиона чисел, вы, похоже, имеете здесь очень жесткую структуру данных, что означает, что вы можете (и должны) воспользоваться преимуществом виртуального элемента управления сеткой (wxGrid),который предназначен для бесперебойной работы даже с невероятно большими наборами данных, как это.Скорее всего, пользователю будет проще прочитать этот элемент управления и найти тот раздел данных, который он ищет.

...