Просмотр сообщений
|
Страниц: 1 ... 56 57 [58]
|
856
|
Qt / Общие вопросы / [решено] zlib
|
: Март 20, 2010, 15:55
|
Коллеги, подскажите, как правильно в проекте использовать zlib (функции compress и uncompress) - включить эти h-файлы в проект или что? И поясните, если zlib встроен в Qt, зачем так глубоко прятать zlib.h и zconf.h? Почему их нет в include?
|
|
|
857
|
Qt / ActiveX / Formula One
|
: Март 17, 2010, 22:10
|
Коллеги, существует ли кроссплатформенный компонент, аналогичный Tidestone Formula One с функциональностью Excel 97? Чтобы можно было использовать в проектах Qt?
|
|
|
858
|
Qt / XML / Re: Чтение XML, запись XML
|
: Март 12, 2010, 22:59
|
Коллеги! Проект (библиотека для работы с xml-документами определенного формата), в связи с которым я и начал этот топик, почти завершен. Если есть желание, можно ознакомиться с ним по ссылке: http://get.freesoft.ru/?id=106788Архив включает скомпилированный демонстрационный пример для Windows. Если влом тянуть весь проект (4.6 Мб), можно ознакомиться с документацией на него (руководство программиста): http://get.freesoft.ru/?id=106789Надеюсь, что вы найдете там кое-что полезное, тем более, что я попытался выработать некоторый общий подход к решению подобных задач. Если кто-то не сочтет за труд это прочитать и высказать свои суждения, буду весьма признателен. Со своей стороны прошу all поделиться функцией формирования суммы прописью, которую можно было бы включить в библиотеку. Собственно, у меня есть такая, но я не знаю автора, и неудобно включать ее во фриварный софт.
|
|
|
859
|
Qt / XML / Re: Чтение XML, запись XML
|
: Март 02, 2010, 10:24
|
Все классы использующие QXmlInputSource автоматически определяют кодировку Я в этом и не сомневался А выдают ли они ее наружу? Как в обработчиках получить значение encoding из декларации?
|
|
|
860
|
Qt / XML / Re: Чтение XML, запись XML
|
: Март 01, 2010, 14:10
|
Еще вопрос. Для определения кодировки исходного xml-файла в обработчике QXmlSimplReader я делаю class CUfebsHandler : public QXmlDefaultHandler {...
bool CUfebsHandler::processingInstruction ( const QString & target, const QString & data ){ encoding="UTF-8"; if(target=="xml"){ int pos=data.indexOf("encoding"); if(pos>=0){ encoding=data.mid(pos).section('\'',1,1).trimmed(); } } return true; }
Остается ощущение, что это велосипед. Нет ли стандартных средств?
|
|
|
861
|
Qt / XML / Re: Чтение XML, запись XML
|
: Март 01, 2010, 10:34
|
У меня все кодеки одинаковые, поэтому должно выполняться обратное преобразование Unicode->cp1251, и в xml текст должен быть в честном UTF-8 Причина, более-менее, понятна - в неэквивалентности прямых и обратных преобразований. Наверное, можно выстроить эти цепочки, но я сделал по-другому. XML-файл загружаю в QByteArray, сохраняя кодировку. Затем определяю кодировку этого файла, используя QXmlSimpleReader преобразую исходный текст честным кодеком (соответствующим кодировке) в unicode - для его просмотра и редактирования. Когда нужен исходный текст, выполняю обратное преобразование из unicode в первоначальную кодировку. В общем, решение очевидное. Я никогда не использовал глобальную установку кодеков вручную и делать этого никогда не буду и никому не советую Прокомментируйте, пожалуйста. Например, чем плох вариант: QTextCodec * codec = QTextCodec::codecForLocale();
QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForCStrings(codec);
|
|
|
862
|
Qt / XML / Re: Чтение XML, запись XML
|
: Февраль 26, 2010, 20:15
|
В строчке с stream.readAll() в text текст попадает уже в юникоде. cp1251->Unicode 4.0 Верно. Затем мы берем строку text (которая у нас уже в Unicode 4.0) и добавляем в QByteArray. Выбираем кодек UTF-8 и ...: выполняем преобразование Unicode 4.0 в Unicode 4.0, обманывая кодек, сказав ему, что у нас там UTF-8 А это не так. Вы пропустили пару строк из моего поста: QByteArray xml; xml.append(text); При выполнении этой операции неявно используется метод QString::toAscii (), который, в свою очередь использует codecForCStrings(). У меня все кодеки одинаковые, поэтому должно выполняться обратное преобразование Unicode->cp1251, и в xml текст должен быть в честном UTF-8. Для всех других русских букв, кроме "И" это выполняется, попробуйте. QTextStream не умеет определять кодировки налету Если есть BOM, то умеет. В общем, пока причина непонятна. Но то, что мне нужно, я получил - просто выкинул QTextStream за ненадобностью: QFile file(fileName); file.open(QFile::ReadOnly | QFile::Text); QByteArray xml=file.readAll(); Таким образом, взаимная перекодировка устранена, глюков нет. Спасибо за подсказки.
|
|
|
863
|
Qt / XML / Re: Чтение XML, запись XML
|
: Февраль 25, 2010, 21:21
|
Коллеги, еще вопрос, если позволите. Нет ли какой-нибудь особенности преобразования прописной русской буквы "И" из UTF-8 с помощью QTextCodec? Проблема следующая. Имеется файл примерно такой (скопировано из QTextEdit): <?xml version="1.0" encoding="UTF-8"?> <ED Acc="11111Р�Р�1111111111111"/> Там, где кракозябры - это две буквы "И". Я его загружаю с помощью QTextStream с отключенным автоопределением кодировки, затем перекодирую в Unicode с использованием кодека QTextCodec::codecForName("UTF-8"). Получаю <?xml version="1.0" encoding="UTF-8"?> <ED Acc="11111�?�?1111111111111"/> Замечу, что остальные русские буквы перекодируются нормально. Более того, если исходный файл в KOI8-R, ISO-8859-5, windows-1251, то все буквы перекодируются нормально. Если читать этот же файл с использованием QXmlSimpleReader, то значение атрибута передается правильно: Acc="11111ИИ1111111111111" (попутно замечу, что этот класс совместно с QXmlStreamWriter - очень неплохое решение для работы с XML, так что вопрос, с чего начался топик, решен в их пользу, библиотека почти готова, затормозил на демонстрационном примере.) Кодеки ForTr, ForLocale, ForCStrings установлены в "windows-1251". Такое ощущение, что я что-то не понимаю (и не только я - топики с кодировками тут обширные, я их полистал). На всякий случай, некоторые куски кода: QTextCodec *cp1251 = QTextCodec::codecForName("windows-1251"); QTextCodec::setCodecForTr(cp1251); QTextCodec::setCodecForLocale(cp1251); QTextCodec::setCodecForCStrings(cp1251);
QTextStream stream(&file); stream.setAutoDetectUnicode(false); QString text=stream.readAll(); // это исходный текст textEdit->append(text);
QByteArray xml; xml.append(text); QTextCodec *codec = QTextCodec::codecForName("UTF-8"); // это перекодированный textEdit->append(codec->toUnicode(xml));
|
|
|
864
|
Qt / XML / Re: Чтение XML, запись XML
|
: Январь 29, 2010, 20:51
|
Encoding записывается только в случае, если QXmlStreamWriter пишет в QIODevice Создаю xml через QXmlStreamWriter, в качестве устройства передаю QByteArray (он не QIODevice) Вот где собака порылась! Из трех конструкторов QXmlStreamWriter с параметрами QIODevice, QByteArray и QString я выбрал тот, который мне был понятнее (последний). А он-то и работает кривовато. Просто заменил строку QString outXml; QXmlStreamWriter writer(&outXml);
на QByteArray outXml; QXmlStreamWriter writer(&outXml);
и что хотел, получил. Спасибо!
|
|
|
865
|
Qt / XML / con: Чтение XML, запись XML
|
: Январь 28, 2010, 22:07
|
Коллеги, в продолжение темы. При записи с помощью QXmlStreamWriter xml-документа нужно, чтобы в декларацию xml записывалась кодировка, типа <?xml version="1.0" encoding="WINDOWS-1251"?>. Курю assistant, в котором говорится что при использовании QXmlStreamWriter::setCodec ( QTextCodec * codec ) the encoding information is stored in the initial xml tag. Главное, чтобы вызов this function был before calling writeStartDocument(). Пишу QXmlStreamWriter writer; writer.setCodec("WINDOWS-1251"); writer.writeStartDocument(); Фигвам. В созданном документе декларация выглядит как <?xml version="1.0"?> без encoding. Думал, что кодек кривой, так нет - если сделать QTextCodec * c=writer.codec(); QString sc=c->name(); то sc показывает правильно: windows-1251. Пробовал разную кодировку, в том числе UTF, все едино... Подскажите, как правильно сформировать декларацию в прологе? Гуру, ау!!!
|
|
|
866
|
Qt / XML / Re: Чтение XML, запись XML
|
: Январь 17, 2010, 14:30
|
Для чтения использую QXmlStreamReader, для создания QXmlStreamWriter. А что с созданием непонятно? это ж проще пареной репы. Например C++ (Qt) QXmlStreamWriter xml; /*...*/ xml.writeStartElement("a"); xml.writeAttribute("href", "#"); xml.writeStartElement("img"); ...
Я бы не назвал это пареной репой Однако ход мысли понятен, спасибо. Предстоит много нудной и противной работы
|
|
|
867
|
Qt / XML / [решено] Чтение XML, запись XML
|
: Январь 06, 2010, 17:10
|
Коллеги! Подскажите, пожалуйста, правильно ли я понял - при чтении и обработке содержимого xml-файлов большого размера (сотни кбайт - десятки Мбайт) средствами Qt следует использовать QXmlSimpleReader, для записи результатов в xml-файл - QXmlStreamWriter? DOM прошу не предлагать, не подходит. С SAX понятно - для чтения, а вот примеров создания xml-файлов нашел немного. Особенно порадовал SAX Bookmarks Example Спасибо.
|
|
|
Страниц: 1 ... 56 57 [58]
|
|
|