Russian Qt Forum
Июля 01, 2025, 20:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QXmlStreamReader  (Прочитано 8926 раз)
OKTA
Гость
« : Сентября 04, 2014, 14:52 »

Товарищи, вопрос дурацкий, но все же вопрос.
Имею файл с xml, читаю его через QXmlStreamReader. При этом, если передавать указатель на QIODevice, то reader ничего в файле не видит, а если сделать readAll и передать ридеру QString, то все ок.. В чем может быть косячок?  Злой
« Последнее редактирование: Сентября 05, 2014, 11:11 от OKTA » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентября 04, 2014, 15:01 »

А открыть QIODevice не забываешь? Код показывай.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #2 : Сентября 04, 2014, 15:04 »

не, не забываю)

Код:
    QFile configFile(filePath);
    if(!configFile.open(QIODevice::ReadOnly)) {
        //
       
        return;
    }

//    QString config = configFile.readAll();
//    QXmlStreamReader reader(config);
    QXmlStreamReader reader(&configFile);

    while(!reader.atEnd() && !reader.hasError()) {
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Сентября 05, 2014, 07:48 »

Вроде, норм все. Сделай минимальный компилябельный пример.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #4 : Сентября 05, 2014, 08:47 »

Код:
QFile configFile("config.xml");
if (!configFile.open(QIODevice::ReadOnly)) {
       qDebug() << "unable to open";
       return 1;
}

QXmlStreamReader reader(&configFile);

 while(!reader.atEnd() && !reader.hasError()) {
        QXmlStreamReader::TokenType token = reader.readNext();
         if (token == QXmlStreamReader::StartDocument)
               continue;
         if (token == QXmlStreamReader::StartElement)
         {
               qDebug() << reader.name().toString();
          }
}
Такой код (Ваш код) на Qt 5.3 Ubuntu 14 отрабатывает нормально.
Записан
OKTA
Гость
« Ответ #5 : Сентября 05, 2014, 10:22 »

Хм...весь прикол в кодировке символов  Непонимающий
В архиве тестовый примерчик и файл конфига - в нем значения поля name достаточно поменять на что-нибудь английское вместо русского и все работает через QXmlStreamReader ( QIODevice * device ). А иначе только через QString и readAll из файла.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Сентября 05, 2014, 10:41 »

В xml попробуй явно кодировку указать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #7 : Сентября 05, 2014, 11:11 »

Хм, да. с указанием кодировки работает. Значит надо просто  setCodec явно делать в QXmlStreamWriter. Всем спасибо!  Подмигивающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Сентября 05, 2014, 11:16 »

Привыкни просто везде, где используется нелатиница, явно указывать кодировку.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #9 : Сентября 05, 2014, 11:25 »

Хм, а вот и не ставится кодировка если использовать setCodec в QXmlStreamWriter  Непонимающий
 
Цитировать
void QXmlStreamWriter::setCodec ( QTextCodec * codec )

Sets the codec for this stream to codec. The codec is used for encoding any data that is written. By default, QXmlStreamWriter uses UTF-8.

The encoding information is stored in the initial xml tag which gets written when you call writeStartDocument(). Call this function before calling writeStartDocument().
Что опять не так?))
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Сентября 05, 2014, 11:30 »

Как всегда, кот в студию!
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #11 : Сентября 05, 2014, 12:01 »

 Смеющийся а, я нашел косяк... Если использовать QXmlStreamWriter сразу с QFile, то кодировка пишется, а если с QString, то нет  Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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