Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Hoksmur от Июль 18, 2013, 12:51



Название: QBuffer - удаление данных
Отправлено: Hoksmur от Июль 18, 2013, 12:51
 Hi, All!
 Ткните носом, как удалить данные в буфере? Если мы читаем с устройства, данные складываются в файл - удаление данных из буфера берёт на себя библиотека. А если в массив, который мы потом сами обрабатываем - как сделать, чтобы он не рос бесконечно?

Код
C++ (Qt)
inputArray = &buffer.buffer();
inputArray->remove(0, inputSamples);
Такая связка не желает работать.


Название: Re: QBuffer - удаление данных
Отправлено: Hoksmur от Июль 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 не желает работать должным образом!
 Буду дальше ковырять, но может есть у кого какие мысли?


Название: Re: QBuffer - удаление данных
Отправлено: Hoksmur от Июль 19, 2013, 10:31
Решено. после выхода из цикла не хватало
Код
C++ (Qt)
buffer.seek(0);
Ну Qt и продолжал расширять буфер, ибо указатель на его конец после работы указывал.