qt中如何在QTableWidget中保存和加载数据

How to save and load data in QTableWidget in qt

我是 QT 的新手,我有一个应用程序,其中有一个 QTableWidget,我想向我的应用程序添加保存和加载选项。问题是如何在 QTableWidget 中保存和加载数据。我找到了这个页面:http://doc.qt.io/qt-5/qtwidgets-tutorials-addressbook-part6-example.html#defining-the-addressbook-class 但它不是 useful:I 尝试了这样的代码来保存:

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中保存和加载数据?

如有任何帮助,我们将不胜感激。

更正您的代码:

...
for(int ii=0;ii<ui->tableWidget->columnCount();ii++)
...

为此(在QTableWidget中保存和加载数据)看Serialization with Qt,所以你需要考虑你到底想要什么Save/load(序列化)。由于 QVector 是可序列化的,我认为您的代码不会抱怨,但实际上它不会存储您的实际数据 QTableWidgetItems,因为该数据类型不在可序列化类型列表中 - 尝试直接保存单个项目你会知道会出现什么错误。此外,序列化 compound 类型(table 项的向量)可能不是正确的方法,即使两种类型都受支持。

为了解决您的问题,您需要序列化存储在 QTableWidget 项目中的任何数据,例如从项目中读取文本并存储...等等

感谢它已使用

修复
item.write(outstream);

我使用写入函数保存了每个项目,然后以相同的顺序使用读取函数 item.read(instream) 再次加载它。