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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QBuffer - удаление данных  (Прочитано 2752 раз)
Hoksmur
Гость
« : Июль 18, 2013, 12:51 »

 Hi, All!
 Ткните носом, как удалить данные в буфере? Если мы читаем с устройства, данные складываются в файл - удаление данных из буфера берёт на себя библиотека. А если в массив, который мы потом сами обрабатываем - как сделать, чтобы он не рос бесконечно?

Код
C++ (Qt)
inputArray = &buffer.buffer();
inputArray->remove(0, inputSamples);
Такая связка не желает работать.
Записан
Hoksmur
Гость
« Ответ #1 : Июль 19, 2013, 09:43 »

Не совсем корректно делал усечение буфера, поправил. Такой тестовый фрагмент работает:
Код
C++ (Qt)
   // testing block
   QByteArray byteArray;
   QBuffer buffer;
   buffer.open(QIODevice::ReadWrite);
   buffer.write("1234", 4);
   buffer.seek(3);
   buffer.write("456\0", 3);
   // byteArray == "abcdef"
 
   qDebug() << buffer.size();
   char ch[10];
   for (int i=0;i<buffer.size();i++) {
       buffer.seek(i);
       buffer.read(&ch[i], 1);
       qDebug() <<" numerical:"<< QString::number(ch[i]);
   }
   qDebug() << "ch:" << ch << "    buf.size:"<< buffer.size();
   byteArray=buffer.buffer();
   byteArray.remove(0, 2);
   buffer.buffer().remove(0, 2);
   qDebug() << "array size: " << byteArray.size();
   for (int i=0;i<buffer.size();i++) {
       buffer.seek(i);
       buffer.read(&ch[i], 1);
       qDebug() <<" numerical:"<< QString::number(ch[i]);
   }
   qDebug() << "ch:" << ch << " \r\n    buf.size:"<< buffer.size();
   buffer.close();
   // end test block
 
Вывод имеет такой вид:
6
 numerical: "49"
 numerical: "50"
 numerical: "51"
 numerical: "52"
 numerical: "53"
 numerical: "54"
ch: 123456     buf.size: 6
array size:  4
 numerical: "51"
 numerical: "52"
 numerical: "53"
 numerical: "54"
ch: 345656 
    buf.size: 4

Но с QAudioInput не желает работать должным образом!
 Буду дальше ковырять, но может есть у кого какие мысли?
Записан
Hoksmur
Гость
« Ответ #2 : Июль 19, 2013, 10:31 »

Решено. после выхода из цикла не хватало
Код
C++ (Qt)
buffer.seek(0);
Ну Qt и продолжал расширять буфер, ибо указатель на его конец после работы указывал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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