Russian Qt Forum
Ноябрь 23, 2024, 04:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Widget для отображения лог файла  (Прочитано 4912 раз)
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 или посоветуйте с написание какого нибудь своего...
« Последнее редактирование: Октябрь 16, 2009, 15:34 от usefull » Записан
alexis031182
Гость
« Ответ #1 : Октябрь 22, 2009, 16:19 »

Может QApplication::processEvents() в цикл добавить?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Октябрь 22, 2009, 16:46 »

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

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

Примечание: я бы нашел минутку это проверить но компилябельного примера Вы не выложили - так что пытаюсь помочь только словами Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Октябрь 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"));
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Tonal
Гость
« Ответ #4 : Октябрь 23, 2009, 08:00 »

Ещё можно скобочки из setUpdatesEnabled вокруг цикла поставить.
Тогда не нужно будет промежуточный список создавать. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 22.