Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: usefull от Октября 16, 2009, 15:32



Название: Widget для отображения лог файла
Отправлено: usefull от Октября 16, 2009, 15:32
Здраствуйте.
У меня такая проблема, прошу помощи.
Есть лог файл объемом гдето 40к строк. Хотелось бы вывести этот текст в текстовое поле (к примеру QTextEdit). QTextEdit-ом я пользуюсь так. Перевожу его в лог-мод
Код:
this->DataTextBox->setTextFormat( Qt::LogText );
потом читаю файл и вывожу построчно
Код:
    QFile IPTRACEfile("iptrace");
    this->DataTextBox->setText(QString(""));
    if ( IPTRACEfile.open( IO_ReadOnly ) )
    {
        QTextStream stream(&IPTRACEfile);
        QString line;
        while ( !stream.atEnd() )
        {
            line = stream.readLine();
            this->DataTextBox->append(line);
        }
        IPTRACEfile.close();
    }
Но даже то что он в лог моде не помогает. Просто с лагами я бы смирился, но программа умирает гдето на 10 минут, только после этого можно просматривать. На сколько я понимаю каждый раз при append-е происходит repaint и это и убивает программу.

Посоветуйте пожалуйста как лучше всего использовать этот Widget или посоветуйте с написание какого нибудь своего...


Название: Re: Widget для отображения лог файла
Отправлено: alexis031182 от Октября 22, 2009, 16:19
Может QApplication::processEvents() в цикл добавить?


Название: Re: Widget для отображения лог файла
Отправлено: Igors от Октября 22, 2009, 16:46
Но даже то что он в лог моде не помогает. Просто с лагами я бы смирился, но программа умирает гдето на 10 минут, только после этого можно просматривать. На сколько я понимаю каждый раз при append-е происходит repaint и это и убивает программу.
Почему не так:

- читать из текстового файла строку за строкой, например в тот же QString line
- для каждой строки добавлять "\n" и прибавлять ее к QString sumLine
- сделать this->DataTextBox->setText(sumLine); один раз когда весь файл прочитан

Примечание: я бы нашел минутку это проверить но компилябельного примера Вы не выложили - так что пытаюсь помочь только словами :)


Название: Re: Widget для отображения лог файла
Отправлено: Пантер от Октября 22, 2009, 16:59
Код
C++ (Qt)
 
QStringList text;
QFile IPTRACEfile("iptrace");
   this->DataTextBox->setText(QString(""));
   if ( IPTRACEfile.open( IO_ReadOnly ) )
   {
       QTextStream stream(&IPTRACEfile);
       while ( !stream.atEnd() )
       {
          text << stream.readLine();
       }
       IPTRACEfile.close();
   }
  this->DataTextBox->append(text.join("\n"));
 


Название: Re: Widget для отображения лог файла
Отправлено: Tonal от Октября 23, 2009, 08:00
Ещё можно скобочки из setUpdatesEnabled вокруг цикла поставить.
Тогда не нужно будет промежуточный список создавать. :)