今天 想到自己写的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