Russian Qt Forum

Qt => Общие вопросы => Тема начата: gelonis от Апрель 24, 2010, 19:16



Название: Вывод текста.
Отправлено: gelonis от Апрель 24, 2010, 19:16
Помогите с простой задачей. Необходимо почитать текстовый файл и вывести его для просмотра. Пробовал выводить в QPlainTextEdit, QTextEdit, QTextBrowser при размерах файлов от 3М начинаются жуткие тормоза.Размер может доходить до 20М. Чем пользоваться? Это вообще нормальная ситуация или я в коде намудрил.

Делаю так
Код:
smallEditor = new QPlainTextEdit;
QString *html;
  QFile file(text);
  if (file.open(QIODevice::ReadOnly)) {
                 html=new QString(file.readAll());}
smallEditor->appendPlainText(*html);


Название: Re: Вывод текста.
Отправлено: alexman от Апрель 24, 2010, 19:26
Можно реализовать виджет, который будет читать данные из файла на лету, то есть при сколлинге.


Название: Re: Вывод текста.
Отправлено: gelonis от Апрель 24, 2010, 20:41
Планируется в последствии перед выводом текста его обрабатывать, как правильно это сделать, может есть пример?


Название: Re: Вывод текста.
Отправлено: Igors от Апрель 24, 2010, 21:08
Непонятно зачем делать указатель на QString, ведь "просто QString" в данном случае займет даже меньше памяти  :)
А в остальном Ваш вариант улучшить нечем. Динамический скроллинг (с подгрузкой) изучался несколько месяцев назад, (на этом форуме). но во всяком случае это сотни строк кода, ни о какой простоте говорить не приходится.  До 100 Mb (объем файла) это не имеет смысла. Так что лучше смириться с тормозами  :)


Название: Re: Вывод текста.
Отправлено: gelonis от Апрель 24, 2010, 21:18
Т.е это нормальная ситуация для этих компонентов? Вывод текста это же обычная процедура, неужели все программы на QT где это применяется тормозят.


Название: Re: Вывод текста.
Отправлено: Авварон от Апрель 24, 2010, 22:57
в креаторе много кода по этому поводу, но, к сожалению, выдирать его всем лениво.


Название: Re: Вывод текста.
Отправлено: alexman от Апрель 25, 2010, 10:18
Есть ли способ определить количество строк в файле быстро?


Название: Re: Вывод текста.
Отправлено: Igors от Апрель 25, 2010, 10:33
Есть ли способ определить количество строк в файле быстро?
readAll и split для возвращаемой QString. Скоростью это не блещет, если надо быстрее - то копирование файла в память и поиск концов строк скромным for. 


Название: Re: Вывод текста.
Отправлено: alexman от Апрель 25, 2010, 10:41
Есть ли способ определить количество строк в файле быстро?
readAll и split для возвращаемой QString. Скоростью это не блещет, если надо быстрее - то копирование файла в память и поиск концов строк скромным for. 
Спасибо! Второй способ можно попробовать!


Название: Re: Вывод текста.
Отправлено: alexman от Апрель 25, 2010, 10:48
Есть ли способ определить количество строк в файле быстро?
readAll и split для возвращаемой QString. Скоростью это не блещет, если надо быстрее - то копирование файла в память и поиск концов строк скромным for. 
Во втором способе есть небольшая проблема: файла может не влезть в оперативку! Можно попробовать загружать частями!


Название: Re: Вывод текста.
Отправлено: Igors от Апрель 25, 2010, 11:48
Во втором способе есть небольшая проблема: файла может не влезть в оперативку! Можно попробовать загружать частями!
Да + есть проблемы с символами концов строк. Варианты решения здесь http://www.prog.org.ru/topic_11267_0.html (http://www.prog.org.ru/topic_11267_0.html)


Название: Re: Вывод текста.
Отправлено: gelonis от Апрель 25, 2010, 18:14
в креаторе много кода по этому поводу, но, к сожалению, выдирать его всем лениво.
Есть пример creatore: Dock Widgets Example. Попробовал вставить туда текста 16М устал ждать ответа от приложения. Как сделать обычный блокнот на QT типа Windows notepad, он же вроде на С реализован?


Название: Re: Вывод текста.
Отправлено: alexman от Апрель 25, 2010, 18:26
в креаторе много кода по этому поводу, но, к сожалению, выдирать его всем лениво.
Есть пример creatore: Dock Widgets Example. Попробовал вставить туда текста 16М устал ждать ответа от приложения. Как сделать обычный блокнот на QT типа Windows notepad, он же вроде на С реализован?
Notepad на большом файле тоже зависнет.


Название: Re: Вывод текста.
Отправлено: Пантер от Апрель 25, 2010, 18:33
У Notepad раньше было ограничение в 64 килобайта. :)


Название: Re: Вывод текста.
Отправлено: gelonis от Апрель 25, 2010, 19:27
Попробуйте сами у меня работает, пару секунд открывает зато потом без тормозов прокручивается.
Вики -
В настоящее время редактор поддерживает контекстную замену, горячие клавиши (например, Ctrl-S для сохранения файла), снят предел в 64 Кбайт и добавлена поддержка Юникода.


Название: Re: Вывод текста.
Отправлено: ufna от Апрель 25, 2010, 20:31
хз, у меня 2метра нотепад долго открывает и висит, 16мегов - вообще даже ждать не хочется


Название: Re: Вывод текста.
Отправлено: lit-uriy от Апрель 25, 2010, 21:13
А тему редактора поддерживающего большие файлы, разжёвывали на форуме основательно и даже тестовые приложения были выложены, которые файлы с фильмами (гигантские) открывают.

Стоит поискать


Название: Re: Вывод текста.
Отправлено: _Vitaliy_ от Апрель 25, 2010, 21:16
Проще всего вот так:
Код:
rowCount=0;
while (!stream.atEnd()) {
stream.readLine();
rowCount++;
}
rowCount это и есть кол-во строк в файле.

Для примера можешь посмотреть в уроке по qwt, там полный пример с считыванием данных, реализованных через модель:http://www.prog.org.ru/topic_11760_0.html (http://www.prog.org.ru/topic_11760_0.html) смотри в аттаче: http://www.prog.org.ru/index.php?action=dlattach;topic=11760.0;attach=1596 (http://www.prog.org.ru/index.php?action=dlattach;topic=11760.0;attach=1596)
в принципе должен разобраться.
Я считываю файлы по 10-20 "метров" за несколько секунд и это работает...


Название: Re: Вывод текста.
Отправлено: gelonis от Апрель 25, 2010, 21:23
Спасибо, буду разбираться, главное, что можно реализовать, а то уже стал сомневаться в возможностях QT


Название: Re: Вывод текста.
Отправлено: gelonis от Апрель 25, 2010, 21:48
А тему редактора поддерживающего большие файлы, разжёвывали на форуме основательно и даже тестовые приложения были выложены, которые файлы с фильмами (гигантские) открывают.

Стоит поискать
А можно носом ткнуть, если не тяжело:)