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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 56 57 [58]
856  Qt / ActiveX / Formula One : Март 17, 2010, 22:10
Коллеги, существует ли кроссплатформенный компонент, аналогичный Tidestone Formula One с функциональностью Excel 97? Чтобы можно было использовать в проектах Qt?
857  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 поделиться функцией формирования суммы прописью, которую можно было бы включить в библиотеку. Собственно, у меня есть такая, но я не знаю автора, и неудобно включать ее во фриварный софт.
858  Qt / XML / Re: Чтение XML, запись XML : Март 02, 2010, 10:24
Цитировать
Все классы использующие QXmlInputSource автоматически определяют кодировку
Я в этом и не сомневался Улыбающийся А выдают ли они ее наружу? Как в обработчиках получить значение encoding из декларации?
859  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;
}
Остается ощущение, что это велосипед. Нет ли стандартных средств?
860  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);
861  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();
Таким образом, взаимная перекодировка устранена, глюков нет.
Спасибо за подсказки.
862  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)); 


863  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);
   
и что хотел, получил.
Спасибо!
864  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, все едино...
Подскажите, как правильно сформировать декларацию в прологе?
Гуру, ау!!!
865  Qt / XML / Re: Чтение XML, запись XML : Январь 17, 2010, 14:30
Для чтения использую QXmlStreamReader, для создания QXmlStreamWriter. А что с созданием непонятно? это ж проще пареной репы. Например

Код
C++ (Qt)
QXmlStreamWriter xml;
/*...*/
xml.writeStartElement("a");
xml.writeAttribute("href", "#");
xml.writeStartElement("img");
...
 
Я бы не назвал это пареной репой Улыбающийся Однако ход мысли понятен, спасибо. Предстоит много нудной и противной работы  Грустный
866  Qt / XML / [решено] Чтение XML, запись XML : Январь 06, 2010, 17:10
Коллеги!
Подскажите, пожалуйста, правильно ли я понял - при чтении и обработке содержимого xml-файлов большого размера (сотни кбайт - десятки Мбайт) средствами Qt следует использовать QXmlSimpleReader, для записи результатов в xml-файл - QXmlStreamWriter?

DOM прошу не предлагать, не подходит. С SAX понятно - для чтения, а вот примеров создания xml-файлов нашел немного. Особенно порадовал SAX Bookmarks Example Грустный
Спасибо.
867  Программирование / Общий / Re: Вызов "чужой" программы, и настройка меню ее. Как? : Апрель 12, 2009, 19:05
Вот пример того, как через WinAPI можно сделать подобные вещи. Но не со всеми программами будет работать.
Это пример: FarCopy 1.0, http://www.freesoft.ru/?id=674026.
Сама библиотека: AutoCopy 2.0, http://www.freesoft.ru/?id=673268.
С Qt, похоже, не совместима (сделана в c++Builder). Но принцип такой.

Страниц: 1 ... 56 57 [58]

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