Russian Qt Forum

Qt => Работа с сетью => Тема начата: Alex_Crack от Май 13, 2010, 23:58



Название: парсинг QByteArray [РЕШЕНО]
Отправлено: Alex_Crack от Май 13, 2010, 23:58
Делаю приложение, которое запрашивает с сервера определенную инфу.
Инфа представляет собой набор строк, разделенных символом с кодом 0.
Написал такой код:

Код
C++ (Qt)
void Agent::getInfo()
{
  manager = new QNetworkAccessManager(this);
  connect(manager, SIGNAL(finished(QNetworkReply*)),
          this, SLOT(replyFinished(QNetworkReply*)));
  ReplyGET = manager->get(QNetworkRequest(QUrl("https://example.com/query2.php?version=xxx&an=xxxxx")));
  ReplyGET->ignoreSslErrors();
 
}
 
void Agent::replyFinished(QNetworkReply *)
{
   ui->plainTextEdit->appendPlainText(ReplyGET->readAll().constData());
}
 

Программа принимает данные от сервера, но в plainTextEdit добавляется только первая строковая константа. Символ с кодом 0 после нее "обрубает" строку и оставшаяся ее часть не выводится.
Вопрос1: как вывести все содержимое?
Вопрос2: Было бы лучше, если б можно было разрезать получаемый QByteArray на отдельные строки по символам с кодом 0, т.к. каждая строка будет добавляться в свой plainTextEdit. Как это можно осуществить?
Заранее спасибо.


Название: Re: парсинг QByteArray
Отправлено: zenden от Май 14, 2010, 00:06
 
QList<QByteArray> QByteArray::split ( char sep ) const


Название: Re: парсинг QByteArray
Отправлено: Alex_Crack от Май 14, 2010, 00:23
Такое уже пытался сделать. А что вставить в ( char sep ) ? ::)


Название: Re: парсинг QByteArray
Отправлено: Alex_Crack от Май 14, 2010, 00:31
Такое уже пытался сделать. А что вставить в ( char sep ) ? ::)
Кажется разобрался...


Название: Re: парсинг QByteArray
Отправлено: Alex_Crack от Май 14, 2010, 01:16

QList<QByteArray> QByteArray::split ( char sep ) const
Можете написать как это будет выглядеть конкретно на моем примере? А то что-то не получается... ::)


Название: Re: парсинг QByteArray
Отправлено: ритт от Май 14, 2010, 01:22
QLatin1Char('\0') ?


Название: Re: парсинг QByteArray
Отправлено: Alex_Crack от Май 14, 2010, 01:30
QLatin1Char('\0') ?
С этим уже разобрался. У меня работает и QChar(0)

Вопрос в другом, как записать вот это разрезание правильно?


Название: Re: парсинг QByteArray
Отправлено: Alex_Crack от Май 14, 2010, 02:16
Сделал.
Код
C++ (Qt)
void Agent::getInfo()
{
  manager = new QNetworkAccessManager(this);
  connect(manager, SIGNAL(finished(QNetworkReply*)),
          this, SLOT(replyFinished(QNetworkReply*)));
  ReplyGET = manager->get(QNetworkRequest(QUrl("https://example.com/query2.php?version=xxx&an=xxxxx")));
  ReplyGET->ignoreSslErrors();
 
}
 
void Agent::replyFinished(QNetworkReply *)
{
   QList<QByteArray> list;
   list = ReplyGET->readAll().split('\0');
}


Название: Re: парсинг QByteArray
Отправлено: Alex_Crack от Май 14, 2010, 19:50
есть еще одна проблема: принимаемые строки в CP-1251. И если, например запихнуть их в MessageBox, то получаем крякозяблы. Как перекодировать-то, чтоб нормально отображалось?


Название: Re: парсинг QByteArray
Отправлено: ритт от Май 14, 2010, 20:25
поиск по форуму. всегда.


Название: Re: парсинг QByteArray
Отправлено: Alex_Crack от Май 14, 2010, 21:15
поиск по форуму. всегда.
спасибо за наводку.
Найденное помогло:
Код
C++ (Qt)
QTextCodec *codec = QTextCodec::codecForName("cp-1251");
QTextCodec::setCodecForCStrings(codec);