Hii,
Below is my code..It displays the Dlls with checkboxes in the tree view..
Now I want to perform some action on it..
On checking and unchecking the checkbox it should perform an action..and also updated the state of the checkbox each time i start the application, means when i hav checked or unchecked the checkbox, it should show me the same state(i.e. checked or unchecked) when I again start my application the next time..
Can any one help me plzz....



/*extension.h:->************************************************* */

#ifndef EXTENSION_H
#define EXTENSION_H

#include "standarditemmodel.h"

#include <QMainWindow>
#include <QStandardItemModel>

namespace Ui {
class extension;
}

class extension : public QMainWindow
{
Q_OBJECT

public:
explicit extension(QWidget *parent = 0);
~extension();

void clicked(QModelIndex index);


//Qt::ItemFlags flags() const;
//virtual QVariant data ( int role) const;
//virtual void setData ( const QVariant & value, int role);

private:
Ui::extension *ui;
//QStandardItemModel *model;
QStandardItem *item;
standarditemmodel *model;

private slots:
//void on_treeView_clicked(QModelIndex index);
};

#endif // EXTENSION_H

/************************************************** ************/


/*extension.cpp->*********************************************** **/

#include "extension.h"
#include "ui_extension.h"
#include "standarditemmodel.h"
#include <QDir>
#include <Qt>
#include <qdebug.h>
#include <QModelIndex>

extension::extension(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::extension)
{

//model = new QStandardItemModel(0,1,this);
model = new standarditemmodel(this);
QString path = "E:/qtpro/codecs";
QDir dir;
dir.setPath(path);
QStringList files;
files << "*.dll";
dir.setNameFilters(files);
QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i)
{
QFileInfo fileInfo = list.at(i);

QModelIndex index = model->index(i,0,QModelIndex());
item = new QStandardItem();
item->setText(QString("%0").arg(fileInfo.fileName())) ;
item->setCheckable(true);
//item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsEditable);
model->setData(index,QVariant(QString("%0").arg(fileInfo .fileName())),Qt::CheckStateRole && Qt:isplayRole);
//model->setData(index,QVariant(Qt::Unchecked),Qt::CheckSt ateRole);
model->setItem(i,item);
}

ui->treeView->setModel(model);

//connect(model,SIGNAL(dataChanged(QModelIndex,QMode lIndex)),this,SLOT(clicked(//QModelIndex)));
connect(ui->treeView,SIGNAL(clicked(QModelIndex)),this,SLOT(o n_treeView_clicked(QModelIndex)));


}

extension::~extension()
{
delete ui;
}

void extension:n_treeView_clicked(QModelIndex index)
{
QStandardItem *item1 = model->itemFromIndex(index);
qDebug()<< item1->text();
}
/************************************************** ************/


/*standarditemmodel.h:->*******************************************/

#ifndef STANDARDITEMMODEL_H
#define STANDARDITEMMODEL_H

#include <QStandardItemModel>
#include <QSet>
#include <QPersistentModelIndex>

class standarditemmodel : public QStandardItemModel
{
Q_OBJECT
public:
explicit standarditemmodel(QObject *parent = 0);
QSet<QPersistentModelIndex> set;



signals:
void dataChanged(QModelIndex, QModelIndex);

public slots:

virtual QVariant data ( const QModelIndex & index, int role) const;
virtual Qt::ItemFlags flags ( const QModelIndex & index ) const;
virtual bool setData ( const QModelIndex & index, const QVariant & value, int role);



};

#endif // STANDARDITEMMODEL_H

/************************************************** *************/


/*standarditemmodel.cpp**************************** *****************/

#include "standarditemmodel.h"
#include <QSet>
#include <QPersistentModelIndex>

standarditemmodel::standarditemmodel(QObject *parent) :
QStandardItemModel(parent)
{

}



QVariant standarditemmodel::data(const QModelIndex& index, int role) const
{

if (index.isValid() && index.column()==0 && role == Qt::CheckStateRole)
return set.contains(index) ? Qt::Checked : Qt::Unchecked;
return QStandardItemModel::data(index, role);
}

Qt::ItemFlags standarditemmodel::flags(const QModelIndex& index) const
{
return QStandardItemModel::flags(index) | Qt::ItemIsUserCheckable;
}

bool standarditemmodel::setData(const QModelIndex& index, const QVariant& value, int role)
{

if (index.isValid() && index.column()==0 && role == Qt::CheckStateRole)
{
if (value == Qt::Checked) set.insert(index);
else set.remove(index);
emit dataChanged(index, index);
return true;
}
return QStandardItemModel::setData(index, value, role);
}

/************************************************** ************/