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

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

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

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

Сообщений: 5876


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


Просмотр профиля 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

Сообщений: 5876


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


Просмотр профиля 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

Сообщений: 5876


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


Просмотр профиля 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

Сообщений: 5876


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


Просмотр профиля 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

Сообщений: 5876


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


Просмотр профиля 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.057 секунд. Запросов: 23.