如何使用 QTextStream 而不是 QDataStream 从 QTableView 进行加载保存?
Posted
技术标签:
【中文标题】如何使用 QTextStream 而不是 QDataStream 从 QTableView 进行加载保存?【英文标题】:How to use QTextStream instead of QDataStream for load-save from QTableView? 【发布时间】:2017-05-03 04:32:26 【问题描述】:我是 QT 的新手,所以当我尝试使用 QDataStream 将 QTableView 中的数据加载并保存到 linux 中的 txt 文件时,我遇到了这样的问题:
txt 文件包含来自 tableview 的数据
我想要的只是易于阅读的 txt 文件中的数据,例如: 数据1;数据2 数据3;数据3
那么,如何使用 QTextStream 而不是 QDataStream,因为当我使用 QTextStream 时,我可以像这样在 txt 中写入输出:
QFile ofile("/home/rizi/LearnQT/tes");
ofile.open(QIODevice::ReadWrite | QIODevice::Text);
QTextStream out(&ofile);
out << line+"\n";
【问题讨论】:
你有代码吗?我找不到从 QTableView 获取 QIODevice 的可能性,还是您的模型? 这是我从 QTableView 打印到 txt 文件的代码:QFile file("/home/rizi/TableView/tes"); if(file.open(QIODevice::WriteOnly)) QDataStream stream(&file); qint32 n(model->rowCount()), m(model->columnCount()); stream << n << m; for(int i=0; i<n; ++i) for(int j=0; j<m; j++) model->item(i,j)->write(stream); file.close();
我正在使用 QStandardItemModel 类来初始化模型
我只是好奇如何使用 QTextStream 从 QTableView 打印数据,以便其他用户可以轻松读取 txt 中的数据
【参考方案1】:
模型中的每个项目都包含多个文本。这就是为什么 write 函数需要一个 QDataStream 实例。如果您可以只保存数据的文本部分,那么您可以随时:
qint32 n(model->rowCount()), m(model->columnCount());
stream << n << m;
for(int i=0; i<n; ++i)
for(int j=0; j<m; j++)
stream << model->item(i,j)->text();
【讨论】:
我之前尝试过,但没有成功,所以我将代码更改为:。 . .stream << model->item(i,j)->write(stream);
我从listview写数据到txt没有任何问题,但是tableview让我很生气。
流 item(i,j)->write(stream);这是错误的。 ->写(流);部分不是必需的以上是关于如何使用 QTextStream 而不是 QDataStream 从 QTableView 进行加载保存?的主要内容,如果未能解决你的问题,请参考以下文章