効率的なトークナイザーを作成するために、QFile を読み取る QTextStream の次の文字を覗き見したいと思います。
しかし、そうするための満足のいく解決策は見つかりません。
QFile f("test.txt");
f.open(QIODevice::WriteOnly);
f.write("Hello world\nHello universe\n");
f.close();
f.open(QIODevice::ReadOnly);
QTextStream s(&f);
int i = 0;
while (!s.atEnd()) {
  ++i;
  qDebug() << "Peek" << i << s.device()->peek(3);
  QString v;
  s >> v;
  qDebug() << "Word" << i << v;
}
次の出力が得られます。
Peek 1 "Hel" # it works only the first time
Word 1 "Hello" 
Peek 2 "" 
Word 2 "world" 
Peek 3 "" 
Word 3 "Hello" 
Peek 4 "" 
Word 4 "universe" 
Peek 5 "" 
Word 5 ""
QTextStream::pos() と QTextStream::seek() を使って、いくつかの実装を試しました。これはうまく機能しますが、pos() にはバグがあります (ファイルが大きすぎると -1 を返します)。
この再発する問題の解決策はありますか? 前もって感謝します。