Qt C ++ - QDataStream不读取布尔值

时间:2014-08-26 12:48:34

标签: c++ qt stream

Hello world,我正在开发一个项目,我可以在文件中序列化一个对象并稍后读取它,但是当我写入值(布尔值)时,它可以工作但是当我尝试读取它们时,这就是我的意思得到:

  

二进制'>>' :没有找到哪个操作符的右侧操作数   键入bool(或没有可接受的转换)

这是我的代码

      void MainWindow::writeSettings()
      {
         QFile *settingsFile = new QFile(":/images/settings_file.txt");

         if(!settingsFile->open(QIODevice::WriteOnly))
         {
          qDebug() << "File not responsing";

         } else
         {
           QDataStream out(settingsFile);
          out.setVersion(QDataStream::Qt_5_3);
          out << settings->getEnableWordWrap();
          out << settings->getShowStatusbar();
          out << settings->getShowToolbar();
}

settingsFile->flush();
settingsFile->close();

}

现在,如果我尝试阅读,请收到错误

         QFile selc(":/images/settings_file.txt");

if(!selc.open(QIODevice::ReadOnly))
{
    qDebug() << "File not responding";
} else
{
    QDataStream in(&selc);
    in >> settings->getEnableWordWrap() >> settings->getShowStatusbar() >> settings->getShowToolbar();
}

selc.close();

getEnableWordWrap()getShowStatusbar()getShowToolbar()都是布尔返回类型。

1 个答案:

答案 0 :(得分:3)

您正在尝试更改,即您的getter提供的值。

您应该首先从流中提取bool值,然后再将它们传递给正确的setter:

QDataStream in(&selc);
bool tmp;
in >> tmp;
settings->setEnableWordWrap(tmp);
in >> tmp;
settings->setShowStatusbar(tmp);
in >> tmp;
settings->setShowToolbar(tmp);

使用Qt实现这一目标的更加面向的对象方法是定义这两个方法来处理QDataStream序列化:

QDataStream &operator<<(QDataStream &, const MySettings &);
QDataStream &operator>>(QDataStream &, MySettings &);

因此,您可以像这样反序列化您的设置:

QDataStream in(&selc);
in >> settings;