Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 06, 2007, 09:14 в конструкторе класса пишу:
Код:
запускаю, все компилится. но я не вижу текста в textEdit !! ... пусто. что опять не так? з.ы.: в примере книги по qt3 вместо readAll() написан просто read(), но если я пишу просто read() - компилятор просит указать в скобках параметр типа qint64 maxlen ... по-этому я решил заюзать readAll. как мне увидеть текст?? ещё не хочет работать Код: *tempdir->replace("a","b"); пишет illegal indirection ... help somebody! Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 06, 2007, 10:42 Начнём с чистописания. Я уверен на 99%, что строку в классе НЕ нужно вьІделять в куче, только по значению, так как её ресурсьІ разделяемьІ:
Код: QString * tempdir; // WRONG! Логика подсказьІвает, что екземпляр файла тоже не нужно вьІделять в куче, так как устройство (IODevice) поддерживает понятие открьІто/закрьІто вместо вьІделено в памяти/не вьІделено. Хотя ето справедливо не во всех случаях, так как сам екземпляр файла уникален. QTextStream стопудово не нужно вьІделять в куче! Ето всего лишь лёгкая обёртка над конвертацией текста. Она создаётся как правило временно и если передаётся, то по ссьІлке. Теперь по вопросу. ВьІ забьІли открьІть файл: Код: file.setFileName( "x:/y/z.txt" ); При попьІтке читать из неоткрьІтого файла получите сообщение в поток ошибок. Советую заглядьІвать туда регулярно, а ещё лучше - поставить на него брикпоинт или запись в лог. Code Less, Create More! Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 07, 2007, 05:40 как заглянуть в поток ошибок / записать в лог?
опять какая-то проблема с replace. пишу: Код:
и опять не вижу своего текста. по типам совпадает. компилируется. а что происходит я не врублюсь. как можно посмотреть что у тебя в потоке в данный момент? что в файле? что в этой текстовой переменной? пытаюсь в текстовые виджеты выводит временную информацию, то получаю компиляцию но не вижу текста, то ошибки во времени исполнения :angry: Название: QTextStream: не работает tutorial example ... Отправлено: bigirbis от Январь 07, 2007, 11:26 Посмотреть, где в файле находишься можно через QIODevice::pos ().
А файлик точно не пустой? Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 07, 2007, 12:02 2bigirbis% естественно не пустой. я немного параноидален, по-этому после каждого запуска проги просматриваю что с ним происходит. после "попытки чтения" все данные на месте. подскажи пару манипуляций с текстовым потоком, чтобы смотреть на "заглушки", чтобы контролировать что происходит внутри? и как просмотреть ошибки из потока ошибок? как сделать лог и тд?
Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 07, 2007, 13:53 Может идиотский вопрос, но... Что такое Breakpoint знаете?
В Qt есть система сообщений от программьІ. Все они делятся на три группьІ: Debug, Warning, Fatal. Все классьІ Qt снабженьІ Warning-сообщениями, сигнализирующими о возможной ошибке в программе, тем не менее при которьІх программа остается работоспособной. Пример: Чтение из неоткрьІтого файла. При фатальной ошибке дальнейшая работа программьІ невозможна, так как допущен 100% баг программиста. Пример: вьІход за предельІ массива, Dead-Lock. Если работаете в студии - stdout и stderr пишутся в окно Output/Debug. Все сообщения можно перехватить с помощью: QtMsgHandler qInstallMsgHandler( QtMsgHandler handler ) Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 07, 2007, 14:30 в Output я заглядываю, warnings там нет. я подумал, что у текстового потока есть свой _специальный_ поток для ошибок, которые не отображаются в Output студии ... брекпоинтами никогда не пользовался.
Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 07, 2007, 18:03 Цитата: "noname.pl" ... брекпоинтами никогда не пользовался. В шоке. Все ответьІ на твои вопросьІ заключаются в следующем: ПривьІкай пользоваться брикпоинтами. Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 07, 2007, 19:02 ну зачем сразу так "я в шоке", я же не программист.
Название: QTextStream: не работает tutorial example ... Отправлено: Steven_Orko от Январь 07, 2007, 21:28 Цитата: "noname.pl" я же не программист :lol: :lol: :lol:Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 08, 2007, 02:42 Цитата: "noname.pl" я же не программист. В шоке ещё раз :shock: :D Запомни. Программист - ето состояние души, муза, мера идейности и креативности. Программист не пишет программьІ, он их и творит. Можеш считать ето болезнью (программизм). Если вовлёкся в изучение библиотеки, значит у тебя есть цель. Значит тьІ ужё заочно вошёл в круг инициативньІх и созидательньІх личностей. Студия - всего лишь программа для кодинга и отладки, воплощению символов текста в мечту, что способствует непрерьІвному полёту алгоритмической мьІсли программиста. Ето инструмент и брикпоинтьІ - его неотьемленая сущность. Что бьІ тебе не говорили, что программист - ето просто профессия - не бери на веру. Программиста без мерьІ идейности вьІкинут на помойку невостребованности через 5 минут теста вакансии. Незнание инструмента - не грех. Главное - способность освоить инструмент для воплощения своих мьІслей. Людей берут на роботу программиста не по принципа знаешь/не знаешь. Берут по принципу можешь научиться/не можешь научиться. Лично я советую научить работе с брикпоинтами - очень полезная штука. Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 08, 2007, 03:16 это я понимаю, но у меня совсем нет практики. а изучать ветряные мельницы просто утомительно ... по-этому я заведомо берусь за задачу, которой делать не умею (язык для меня новый, библиотека так же, кроме языка новы и парадигмы связанные с больше с идеологией данного языка чем с синтаксисом). но назвать себя программистом, у меня не поворачивается язык. пока что я просто заинтересованный, мне просто стало интересно попрограммировать, шёлк! и вдруг интересно. я думаю что научиться могут все, наверное дело в желани, на сколько оно сильно и продолжительно, чтобы прилагать усилия ... ну и конечно кое-что решает случай и люди которые могут помочь. p.s.: брекпоинты взял на заметку.
Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 10, 2007, 11:24 Цитата: "Dendy" Логика подсказьІвает, что екземпляр файла тоже не нужно вьІделять в куче, так как устройство (IODevice) поддерживает понятие открьІто/закрьІто вместо вьІделено в памяти/не вьІделено. Хотя ето справедливо не во всех случаях, так как сам екземпляр файла уникален. [/b] а как быть в случае когда количество создаваемых файлов станет известно только во время выполнения программы и их имена тоже? Название: QTextStream: не работает tutorial example ... Отправлено: Вячеслав от Январь 10, 2007, 21:50 А они файлы все сразу нужны или по-очереди ? А то открывать(или статически выделять) пару тысяч файлов IMHO как-то не кошерно ;)
Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 11, 2007, 00:30 может и не кошерно, но это условие задачи ... ну зачем тысячу, можно хотя бы в пределах 100. но смысл делать реализацию немасштабируемой? файлы нужны поочереди. запустилась прога, ты указал сколько нужно и для каждого задал имя, далее программа работает с файлами поочереди. сначал с одним, потом с другим потом с сто двадцать пятым. выполнился цикл работы с файлами и я могу ещё раз проделать то же самое не закрывая прогу.так что есть идеи?
Название: QTextStream: не работает tutorial example ... Отправлено: crocus от Январь 11, 2007, 03:09 Прочитал топик - так и не понял задачи, сформулируй чего ты хочешь. Что касается чтения и записи из файла в файл, мне помогли примеры \4.2.2\demos\textedit и \4.2.2\examples\dialogs\findfiles.
Цитировать файлы нужны поочереди. запустилась прога, ты указал сколько нужно и для каждого задал имя Какие файлы ??? с диска или ты их сначала создал ??? если создал зачем так много. И извини: Цитировать this->tempdir = new QString; Может лучше придерживаться стиля программирования как у Бланшет и в Асистенте. Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 11, 2007, 05:46 Запустилась прога, указал количество файлов и имена и... сохранил их в QStringList. При обращении берёшь нужное имя, открьІваешь файл. Я сходу не представляю задачу, в которой нужно держать открьІтьІми сотню файлов. Но если действительно их количество неизвестно - правильньІй способ хранить на них указатели: QList<QFile*>, QHash<QString,QFile*>, ибо операции копирования для обьектов запрещеньІ.
Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 11, 2007, 08:03 2crocus% ну почему же не понял, я предыдущем посте все ясненько описал ... мне уже тут сделали замечание по поводу увлечения выдылением всего в хип ... так что я немного запутался =)
2Dendy% нет, не одновременно. в _выполняющейся_ проге нужно указать количество файлов (возможно, и их имена). указал, нажал кнопку "фпирёт" и программа НЕ работает со всем одновременно. создала один файл, обработала, закрыла; второй - обработала ... и закрыла. и так далее. задача проста: генерация файлов по определенному правилу. ... спасибо за QHash. добавлено спустя 2 минуты: p.s.: 2crocus% с "проблемой" описанной в начале топика я уже разобрался. она заключалась в том, что после прочтения текстового потока методом readAll() терялся указатель на начало файла, и второй раз я читал с конца до конгца. то есть не читал ничего. ну + мелкие стилистические помарки. Название: QTextStream: не работает tutorial example ... Отправлено: crocus от Январь 11, 2007, 08:30 Может это поможет.
Взято из примера findFile с небольшими доработками: Код:
Грубо говоря- открыли папку- считали все файлы из папки в один новый файл- закрыли новый. Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 11, 2007, 12:08 а чем плох подход
Код: QFile p_file = new Qfile("x:/tempdir/example.txt"); Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 11, 2007, 12:44 А чем плох код в цикле обработки:
Код: struct MyFile Другими словами. ВременньІе переменньІе, не вьІходящие за предельІ области видимости, и которьІе корректно самоочищаются создавайте в стеке. Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 11, 2007, 18:39 я так понимаю резюмирующая строчка:
Код: data = new QByteArray( file->files[0]->readAll() ); и деструкторы: Код: delete data; // what? forgot to NULL pointer? p.s.: компилятор ругается на то что якобы не хватает точки с запятой после if (file->count < 1) перед { ... в чем прикол? Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 12, 2007, 16:36 если быть точнее ругается на строку
Код: file->files = new (QFile *)[count]; Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 12, 2007, 17:19 Неужели тьІ "ето" собирал? Ето пример ужасного кода. Вот правильньІй:
Код: QFile file( a:/b.c.txt ); Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 12, 2007, 17:34 хм ... просто вопрос был немного не о том. вопрос был о динамическом создании файлов. нужно заранее неизвестное количество файлов создавать. вот скажем есть форма на ней лайнедит и пушбаттон. пишем в lineEdit текст = 50. смысл в том, чтобы создать 50 файлов по маске типа
Код: /tmp/delfirst/example1.txt так чтобы не было утечек, и можно было бы обрабатывать файлы в любое последующее время (во время выполняния), то есть хранить их в каком-нить векторе или стеке или хрен знает где ещё ... вобщем я так и не получил (или не понял среди написанного тут) ответы на эти вопросы. Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 12, 2007, 18:56 А ето не ответ?
Цитата: "Dendy" Но если действительно их количество неизвестно - правильньІй способ хранить на них указатели: QList<QFile*>, QHash<QString,QFile*>, ибо операции копирования для обьектов запрещеньІ. Название: QTextStream: не работает tutorial example ... Отправлено: noname.pl от Январь 12, 2007, 19:23 ага, уже так и сделал. а как теперь правильно очистить память?
Код: for(int i = 1; i <=ui.numberofPages->text().toInt(); i++){ Название: QTextStream: не работает tutorial example ... Отправлено: Dendy от Январь 12, 2007, 20:04 Код: qDeleteAll( fileList ); |