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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: парсинг QByteArray [РЕШЕНО]  (Прочитано 9793 раз)
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. Как это можно осуществить?
Заранее спасибо.
« Последнее редактирование: Май 15, 2010, 13:29 от Alex_Crack » Записан
zenden
Гость
« Ответ #1 : Май 14, 2010, 00:06 »

 
QList<QByteArray> QByteArray::split ( char sep ) const
Записан
Alex_Crack
Гость
« Ответ #2 : Май 14, 2010, 00:23 »

Такое уже пытался сделать. А что вставить в ( char sep ) ? Строит глазки
Записан
Alex_Crack
Гость
« Ответ #3 : Май 14, 2010, 00:31 »

Такое уже пытался сделать. А что вставить в ( char sep ) ? Строит глазки
Кажется разобрался...
Записан
Alex_Crack
Гость
« Ответ #4 : Май 14, 2010, 01:16 »


QList<QByteArray> QByteArray::split ( char sep ) const
Можете написать как это будет выглядеть конкретно на моем примере? А то что-то не получается... Строит глазки
Записан
ритт
Гость
« Ответ #5 : Май 14, 2010, 01:22 »

QLatin1Char('\0') ?
Записан
Alex_Crack
Гость
« Ответ #6 : Май 14, 2010, 01:30 »

QLatin1Char('\0') ?
С этим уже разобрался. У меня работает и QChar(0)

Вопрос в другом, как записать вот это разрезание правильно?
Записан
Alex_Crack
Гость
« Ответ #7 : Май 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');
}
Записан
Alex_Crack
Гость
« Ответ #8 : Май 14, 2010, 19:50 »

есть еще одна проблема: принимаемые строки в CP-1251. И если, например запихнуть их в MessageBox, то получаем крякозяблы. Как перекодировать-то, чтоб нормально отображалось?
Записан
ритт
Гость
« Ответ #9 : Май 14, 2010, 20:25 »

поиск по форуму. всегда.
Записан
Alex_Crack
Гость
« Ответ #10 : Май 14, 2010, 21:15 »

поиск по форуму. всегда.
спасибо за наводку.
Найденное помогло:
Код
C++ (Qt)
QTextCodec *codec = QTextCodec::codecForName("cp-1251");
QTextCodec::setCodecForCStrings(codec);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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