QSettings 保存配置信息

本文介绍了一种使用QSettings来保存和恢复QTableWidget状态的方法。通过记录每个单元格的操作信息,如行号、列号及单元格类型等,并在下次启动时根据这些信息重建表格状态,实现持久化存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天 想到自己写的tableWidget 在第二次打开时不能恢复第一次时进行过的操作。

一开始想到的办法是 建立一个 三元组< row,column,item>
在每次对cell操作后都保存下来。最后在关闭的时候将这个三元组保存下来。
但问题出在 item 是 QTableWidgetItem 类型。流文件写入总是显示 <<运算符有错。应该是没有重载。
(其实可以保存 item->type() 的,这样一来在打开的时候重新构建就好了)

之后想到写XML, 网上看了些资料,感觉有些麻烦。
再之后 就是 QSettings 了。
用起来很简单,
贴一下自己的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <qDebug>
#include <QSettings>
struct{
    int row;
    int column;
    QTableWidgetItem item;
};
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

    ui->setupUi(this);
    this->resize(700,600);
    tablewidget = new QTableWidget(10,5,this);
    tablewidget->resize(700,400);



    count = 0;
    //qDebug()<<count;
    QString myfile = "test.ini";
    settings = new QSettings(myfile,QSettings::IniFormat);
    int size = settings->beginReadArray("information");
    qDebug()<<size;
    for(int i = 0; i < size; i ++ ){
        settings->setArrayIndex(i);
        int row = settings->value("row").toInt();
        int col = settings->value("column").toInt();
        int typ = settings->value("itemType").toInt();
        QTableWidgetItem * item = NULL;
        switch(typ){
        case 0:
            item = new QTableWidgetItem("item",0);
            break;
        case 1:
            item = new QTableWidgetItem("ssss",1);
            break;
        }
        if(item)
            tablewidget->setItem(row,col,item);
    }
    settings->endArray();
    //前面的这些是为了重现上一次的操作
    settings->clear();//清空操作
    settings->beginWriteArray("information");

    connect(tablewidget,SIGNAL(clicked(QModelIndex)),this,SLOT(on_Click(QModelIndex)));
    QPushButton *saveButton = new QPushButton(this);
    connect(saveButton,SIGNAL(clicked(bool)),this,SLOT(on_Button(bool)));
}

void MainWindow::on_Click(QModelIndex index)
{

    QTableWidgetItem *item = new QTableWidgetItem(tr("item"),0);
    tablewidget->setItem(index.row(),index.column(),item);
    qDebug()<<"on_Click()"<<count;

    settings->setArrayIndex(count);
    settings->setValue("row",index.row());
    settings->setValue("column",index.column());
    settings->setValue("itemType",0);
    //上面这几句是保存到ini文件中。
    count++; //count作为settings 的index 相当于数组下标,需要加一
}

void MainWindow::closeEvent(QCloseEvent)
{
    qDebug()<<"closeEvent";
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_Button(bool)
{
    settings->endArray();
}

在这里我将操作保存成了配置信息,在第二次打开的时候恢复之。
更像是保存了每一次操作的log,然后在第二次打开时根据log重现第一次的状态。因此这种情况并不是感觉很好。

具体的QSettings 的操作 可以见博客:
http://blog.youkuaiyun.com/styyzxjq2009/article/details/8193594#comments

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值