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()
都是布尔返回类型。
答案 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;