【问题标题】:How to save and load data in QTableWidget in qt如何在qt中的QTableWidget中保存和加载数据
【发布时间】: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 中保存和加载数据?

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ qt save load qtablewidget


    【解决方案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) 再次加载它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-11
        • 1970-01-01
        • 2019-01-19
        • 2012-07-24
        相关资源
        最近更新 更多