Russian Qt Forum

Qt => Общие вопросы => Тема начата: OKTA от Сентябрь 04, 2014, 14:52



Название: [РЕШЕНО] QXmlStreamReader
Отправлено: OKTA от Сентябрь 04, 2014, 14:52
Товарищи, вопрос дурацкий, но все же вопрос.
Имею файл с xml, читаю его через QXmlStreamReader. При этом, если передавать указатель на QIODevice, то reader ничего в файле не видит, а если сделать readAll и передать ридеру QString, то все ок.. В чем может быть косячок?  >:(


Название: Re: QXmlStreamReader
Отправлено: Пантер от Сентябрь 04, 2014, 15:01
А открыть QIODevice не забываешь? Код показывай.


Название: Re: QXmlStreamReader
Отправлено: OKTA от Сентябрь 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()) {


Название: Re: QXmlStreamReader
Отправлено: Пантер от Сентябрь 05, 2014, 07:48
Вроде, норм все. Сделай минимальный компилябельный пример.


Название: Re: QXmlStreamReader
Отправлено: torwig от Сентябрь 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 отрабатывает нормально.


Название: Re: QXmlStreamReader
Отправлено: OKTA от Сентябрь 05, 2014, 10:22
Хм...весь прикол в кодировке символов  ???
В архиве тестовый примерчик и файл конфига - в нем значения поля name достаточно поменять на что-нибудь английское вместо русского и все работает через QXmlStreamReader ( QIODevice * device ). А иначе только через QString и readAll из файла.


Название: Re: QXmlStreamReader
Отправлено: Пантер от Сентябрь 05, 2014, 10:41
В xml попробуй явно кодировку указать.


Название: Re: QXmlStreamReader
Отправлено: OKTA от Сентябрь 05, 2014, 11:11
Хм, да. с указанием кодировки работает. Значит надо просто  setCodec явно делать в QXmlStreamWriter. Всем спасибо!  ;)


Название: Re: [РЕШЕНО] QXmlStreamReader
Отправлено: Пантер от Сентябрь 05, 2014, 11:16
Привыкни просто везде, где используется нелатиница, явно указывать кодировку.


Название: Re: [РЕШЕНО] QXmlStreamReader
Отправлено: OKTA от Сентябрь 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().
Что опять не так?))


Название: Re: [РЕШЕНО] QXmlStreamReader
Отправлено: Пантер от Сентябрь 05, 2014, 11:30
Как всегда, кот в студию!


Название: Re: [РЕШЕНО] QXmlStreamReader
Отправлено: OKTA от Сентябрь 05, 2014, 12:01
 ;D а, я нашел косяк... Если использовать QXmlStreamWriter сразу с QFile, то кодировка пишется, а если с QString, то нет  ;D