-1

我需要知道 QTextStream 到 bool 变量的转换。看看我的代码:

QFile file(SOME FILENAME);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) qDebug() << "FILE COULD NOT BE OPENED";
QTextStream stream(&file);

bool dBm = false;
if (!stream.atEnd()) stream >> dbM;

由于我上面的表达式抛出了我需要帮助的错误。

4

1 回答 1

2

没有开箱即用的运算>>符。QTextStreambool

医生。QTextStream提到了很多输入运算符,但没有提到bool

QTextStream & operator>>(QChar &c)
QTextStream & operator>>(char &c)
QTextStream & operator>>(short &i)
QTextStream & operator>>(unsigned short &i)
QTextStream & operator>>(int &i)
QTextStream & operator> >(unsigned int &i)
QTextStream & operator>>(long &i)
QTextStream & operator>>(unsigned long &i)
QTextStream & operator>>(qlonglong &i)
QTextStream & operator>>(qulonglong &i)
QTextStream & operator>>(float &f)
QTextStream & 运算符>>(double &f)
QTextStream & 运算符>>(QString &str)
QTextStream & operator>>(QByteArray &array)
QTextStream & operator>>(char *c)

但是,为了个人的快乐添加一个并不复杂。

对此最复杂的是@Frank Osterfeldtrue在此评论中已经提到的 - 定义and的适当文本表示false

对于我的 MCVE,我简单地使用了01.

testQTextStreamInputBool.cc

#include <QDebug>
#include <QTextStream>

// a stream input operator for bool
QTextStream& operator>>(QTextStream &in, bool &var)
{
  char value;
  in >> value;
  var = value == '1';
  return in;
}

int main()
{
  QTextStream in(stdin);
  while (!in.atEnd()) {
    bool value; in >> value;
    qDebug() << "Read:" << (value ? "true" : "false");
  }
}

testQTextStreamInputBool.pro

SOURCES = testQTextStreamInputBool.cc

QT = core

bashcygwin64中编译和测试:

$ qmake-qt5 testQTextStreamInputBool.pro

$ make
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o testQTextStreamInputBool.o testQTextStreamInputBool.cc
g++  -o testQTextStreamInputBool.exe testQTextStreamInputBool.o   -lQt5Core -lpthread 

$ echo "0110010" | ./testQTextStreamInputBool
Read: false
Read: true
Read: true
Read: false
Read: false
Read: true
Read: false

$

当然,重载operator<<(QTextStream&, bool)以及为自定义输入提供匹配的自定义输出也是有意义的。

如果不是,编译器将隐式转换boolint,并使用QTextStream::operator<<(int)。因此,false将写为0true1

这正是我重载的布尔流输入运算符所期望的......

于 2019-11-19T16:03:12.930 回答