如何使用 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(&amp;file); qint32 n(model-&gt;rowCount()), m(model-&gt;columnCount()); stream &lt;&lt; n &lt;&lt; m; for(int i=0; i&lt;n; ++i) for(int j=0; j&lt;m; j++) model-&gt;item(i,j)-&gt;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 &lt;&lt; model-&gt;item(i,j)-&gt;write(stream);我从listview写数据到txt没有任何问题,但是tableview让我很生气。 流 item(i,j)->write(stream);这是错误的。 ->写(流);部分不是必需的

以上是关于如何使用 QTextStream 而不是 QDataStream 从 QTableView 进行加载保存?的主要内容,如果未能解决你的问题,请参考以下文章

21文本文件操作

使用 QTextStream 读取字符串的第一行

如何使用QTextStream优化ASCII输出

qt中保存内容到文件为啥要输出

使用 QTextStream 反序列化?

QFile 和 QTextStream 帮助(使用用户名、密码和名称为用户编写 ID)