如何在qt中的QTableWidget中保存和加载数据
Posted
技术标签:
【中文标题】如何在qt中的QTableWidget中保存和加载数据【英文标题】:How to save and load data in QTableWidget in qt 【发布时间】:2018-07-18 07:24:24 【问题描述】:我对 QT 很陌生,我有一个应用程序,其中有一个 QTableWidget,我想为我的应用程序添加保存和加载选项。问题是如何在 QTableWidget 中保存和加载数据。我找到了这个页面:http://doc.qt.io/qt-5/qtwidgets-tutorials-addressbook-part6-example.html#defining-the-addressbook-class 但它没有用:我尝试了这样的代码来保存:
void training::on_pushButton_3_clicked()
QVector<QTableWidgetItem*> outvector;
for(int i = 0;i<ui->tableWidget->rowCount();i++)
for(int ii=0;i<ui->tableWidget->columnCount();ii++)
outvector.append(ui->tableWidget->item(i,ii));
QString path = QFileDialog::getSaveFileName(this,QString("Save file path"),"",QString("table (*.tbl);;All Files (*)"));
if(path.isEmpty())
return;
else
QFile file(path);
if(!file.open(QIODevice::WriteOnly))
QMessageBox::information(this,"Error",file.errorString());
return;
else
QDataStream out(&file);
out.setVersion(QDataStream::Qt_5_11);
out<<outvector;
是这样吗?!如果可行,如何再次加载信息;如果不是如何在 tablewidget 中保存和加载数据?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:对您的代码进行此更正:
...
for(int ii=0;ii<ui->tableWidget->columnCount();ii++)
...
为此(在QTableWidget
中保存和加载数据)查看Serialization with Qt,因此您需要考虑到底要保存/加载(序列化)什么。由于QVector
是可序列化的,我认为您的代码不会抱怨,但实际上它不会存储您的实际数据QTableWidgetItems,因为该数据类型不在可序列化类型列表中 - 尝试直接保存单个项目并且您会知道会出现什么错误。此外,序列化 compound 类型(表格项的向量)可能不是正确的方法,即使两种类型都支持。
为了解决您的问题,您需要序列化您存储在 QTableWidget
项目中的任何数据,例如从项目中读取文本并存储...等。
【讨论】:
【参考方案2】:感谢使用
item.write(outstream);
我使用写入函数保存了每个项目,然后以相同的顺序使用读取函数item.read(instream)
再次加载它。
【讨论】:
以上是关于如何在qt中的QTableWidget中保存和加载数据的主要内容,如果未能解决你的问题,请参考以下文章
如何防止用户使用 Python 和 Qt 在 QtableWidget 中移动列的大小?
QT如何获取QTableWidget表格中的高亮位置的行数?
QT中的QtableWidget和QtableView使用有啥区别?