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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QTextStream: не работает tutorial example ...  (Прочитано 16099 раз)
noname.pl
Гость
« : Январь 06, 2007, 09:14 »

в конструкторе класса пишу:
Код:

this->tempdir = new QString; //QString *tempdir
qf_tempdir = new QFile("x:/tempdir/example.txt"); //QFile *qf_tempdir;
QTextStream* in = new QTextStream(qf_tempdir);
*tempdir = in->readAll();
ui.textEdit->setText(*tempdir);

запускаю, все компилится. но я не вижу текста в textEdit !! ... пусто. что опять не так? з.ы.: в примере книги по qt3 вместо readAll() написан просто read(), но если я пишу просто read() - компилятор просит указать в скобках параметр типа qint64 maxlen ... по-этому я решил заюзать readAll. как мне увидеть текст??
ещё не хочет работать
Код:
*tempdir->replace("a","b");

пишет illegal indirection ... help somebody!
Записан
Dendy
Гость
« Ответ #1 : Январь 06, 2007, 10:42 »

Начнём с чистописания. Я уверен на 99%, что строку в классе НЕ нужно вьІделять в куче, только по значению, так как её ресурсьІ разделяемьІ:

Код:
QString * tempdir; // WRONG!
QString tempdir; // GOOD


Логика подсказьІвает, что екземпляр файла тоже не нужно вьІделять в куче, так как устройство (IODevice) поддерживает понятие открьІто/закрьІто вместо вьІделено в памяти/не вьІделено. Хотя ето справедливо не во всех случаях, так как сам екземпляр файла уникален.

QTextStream стопудово не нужно вьІделять в куче! Ето всего лишь лёгкая обёртка над конвертацией текста. Она создаётся как правило временно и если передаётся, то по ссьІлке.

Теперь по вопросу. ВьІ забьІли открьІть файл:

Код:
file.setFileName( "x:/y/z.txt" );
if ( file.open( QIODevice::ReadOnly ) )
{
  QTextStream in( &file );
  ui.textEdit->setText( in.readAll() );
}


При попьІтке читать из неоткрьІтого файла получите сообщение в поток ошибок. Советую заглядьІвать туда регулярно, а ещё лучше - поставить на него брикпоинт или запись в лог.

Code Less, Create More!
Записан
noname.pl
Гость
« Ответ #2 : Январь 07, 2007, 05:40 »

как заглянуть в поток ошибок / записать в лог?
опять какая-то проблема с replace. пишу:
Код:

QString qwe = in.readAll();
qwe.replace("windows", "unix");
n->ui.textEdit->setText(qwe);

и опять не вижу своего текста. по типам совпадает. компилируется. а что происходит я не врублюсь. как можно посмотреть что у тебя в потоке в данный момент? что в файле? что в этой текстовой переменной? пытаюсь в текстовые виджеты выводит временную информацию, то получаю компиляцию но не вижу текста, то ошибки во времени исполнения :angry:
Записан
bigirbis
Гость
« Ответ #3 : Январь 07, 2007, 11:26 »

Посмотреть, где в файле находишься можно через QIODevice::pos ().
А файлик точно не пустой?
Записан
noname.pl
Гость
« Ответ #4 : Январь 07, 2007, 12:02 »

2bigirbis% естественно не пустой. я немного параноидален, по-этому после каждого запуска проги просматриваю что с ним происходит. после "попытки чтения" все данные на месте. подскажи пару манипуляций с текстовым потоком, чтобы смотреть на "заглушки", чтобы контролировать что происходит внутри? и как просмотреть ошибки из потока ошибок? как сделать лог и тд?
Записан
Dendy
Гость
« Ответ #5 : Январь 07, 2007, 13:53 »

Может идиотский вопрос, но... Что такое Breakpoint знаете?

В Qt есть система сообщений от программьІ. Все они делятся на три группьІ: Debug, Warning, Fatal.

Все классьІ Qt снабженьІ Warning-сообщениями, сигнализирующими о возможной ошибке в программе, тем не менее при которьІх программа остается работоспособной. Пример: Чтение из неоткрьІтого файла.

При фатальной ошибке дальнейшая работа программьІ невозможна, так как допущен 100% баг программиста. Пример: вьІход за предельІ массива, Dead-Lock.

Если работаете в студии - stdout и stderr пишутся в окно Output/Debug.

Все сообщения можно перехватить с помощью:

QtMsgHandler qInstallMsgHandler( QtMsgHandler handler )
Записан
noname.pl
Гость
« Ответ #6 : Январь 07, 2007, 14:30 »

в Output я заглядываю, warnings там нет. я подумал, что у текстового потока есть свой _специальный_ поток для ошибок, которые не отображаются в Output студии ... брекпоинтами никогда не пользовался.
Записан
Dendy
Гость
« Ответ #7 : Январь 07, 2007, 18:03 »

Цитата: "noname.pl"
... брекпоинтами никогда не пользовался.


В шоке.

Все ответьІ на твои вопросьІ заключаются в следующем:
ПривьІкай пользоваться брикпоинтами.
Записан
noname.pl
Гость
« Ответ #8 : Январь 07, 2007, 19:02 »

ну зачем сразу так "я в шоке", я же не программист.
Записан
Steven_Orko
Гость
« Ответ #9 : Январь 07, 2007, 21:28 »

Цитата: "noname.pl"
я же не программист
 :lol:  :lol:  :lol:
Записан
Dendy
Гость
« Ответ #10 : Январь 08, 2007, 02:42 »

Цитата: "noname.pl"
я же не программист.


В шоке ещё раз  :shock:  Веселый

Запомни. Программист - ето состояние души, муза, мера идейности и креативности. Программист не пишет программьІ, он их и творит. Можеш считать ето болезнью (программизм).

Если вовлёкся в изучение библиотеки, значит у тебя есть цель. Значит тьІ ужё заочно вошёл в круг инициативньІх и созидательньІх личностей. Студия - всего лишь программа для кодинга и отладки, воплощению символов текста в мечту, что способствует непрерьІвному полёту алгоритмической мьІсли программиста. Ето инструмент и брикпоинтьІ - его неотьемленая сущность.

Что бьІ тебе не говорили, что программист - ето просто профессия - не бери на веру. Программиста без мерьІ идейности вьІкинут на помойку невостребованности через 5 минут теста вакансии.

Незнание инструмента - не грех. Главное - способность освоить инструмент для воплощения своих мьІслей. Людей берут на роботу программиста не по принципа знаешь/не знаешь. Берут по принципу можешь научиться/не можешь научиться.

Лично я советую научить работе с брикпоинтами - очень полезная штука.
Записан
noname.pl
Гость
« Ответ #11 : Январь 08, 2007, 03:16 »

это я понимаю, но у меня совсем нет практики. а изучать ветряные мельницы просто утомительно ... по-этому я заведомо берусь за задачу, которой делать не умею (язык для меня новый, библиотека так же, кроме языка новы и парадигмы связанные с больше с идеологией данного языка чем с синтаксисом). но назвать себя программистом, у меня не поворачивается язык. пока что я просто заинтересованный, мне просто стало интересно попрограммировать, шёлк! и вдруг интересно. я думаю что научиться могут все, наверное дело в желани, на сколько оно сильно и продолжительно, чтобы прилагать усилия ... ну и конечно кое-что решает случай и люди которые могут помочь. p.s.: брекпоинты взял на заметку.
Записан
noname.pl
Гость
« Ответ #12 : Январь 10, 2007, 11:24 »

Цитата: "Dendy"
Логика подсказьІвает, что екземпляр файла тоже не нужно вьІделять в куче, так как устройство (IODevice) поддерживает понятие открьІто/закрьІто вместо вьІделено в памяти/не вьІделено. Хотя ето справедливо не во всех случаях, так как сам екземпляр файла уникален. [/b]

а как быть в случае когда количество создаваемых файлов станет известно только во время выполнения программы и их имена тоже?
Записан
Вячеслав
Гость
« Ответ #13 : Январь 10, 2007, 21:50 »

А они файлы все сразу нужны или по-очереди ? А то открывать(или статически выделять) пару тысяч файлов IMHO как-то не кошерно Подмигивающий
Записан
noname.pl
Гость
« Ответ #14 : Январь 11, 2007, 00:30 »

может и не кошерно, но это условие задачи ... ну зачем тысячу, можно хотя бы в пределах 100. но смысл делать реализацию немасштабируемой? файлы нужны поочереди. запустилась прога, ты указал сколько нужно и для каждого задал имя, далее программа работает с файлами поочереди. сначал с одним, потом с другим потом с сто двадцать пятым. выполнился цикл работы с файлами и я могу ещё раз проделать то же самое не закрывая прогу.так что есть идеи?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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