3

スペースが含まれているファイル名がありますが、タブで区切られています。を使用してそれらを 1 つずつ読み取るにはどうすればよいQTextStreamですか?

通常の方法では、タブとスペース (実際には any QChar::isSpace()) で分割されますが、これは私がここで望んでいるものではありません。

QString s = "file 1.txt\tfile 2.txt";
QTextStream st(&s);
st >> s1 >> s2; // <--- This won't work, it'll give me "file" and "1.txt"

現在、回避策としてQString::split()代わりに使用していますが、 .QTextStreamQTextStream

4

3 に答える 3

3

本当にストリーム方式で実行したい場合は、カスタム TextStream を作成して >> 演算子をオーバーライドするという別のオプションがあります。

#include <QString>
#include <QStringBuilder>
#include <QTextStream>

class MyTextStream : public QTextStream {
public:
  MyTextStream(QString* str) : QTextStream(str) {}

  MyTextStream& operator>>(QString & str) {
    QChar ch;
    while (!atEnd()) {
      QTextStream::operator >>(ch);
      if (ch == '\t') {
        break;
      }
      str = str % ch;
    }
    return *this;
  }
};

int main() {
  QString s1, s2;
  QString s = "file 1.txt\tfile 2.txt";
  MyTextStream st(&s);
  st >> s1 >> s2; // <--- s1 becomes "file 1.txt" and s2 becomes "file 2.txt"
}
于 2015-01-08T11:42:59.243 に答える