When trying to insert items into my QAbstractItemModel:
ListModel * model = new ListModel();
for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 4; ++column) {
model->insertRow(1);
qDebug
() << model
->setData
(model
->index
(row
),
QVariant::QVariant("halooo"),Qt
::EditRole);
qDebug() << model->data(model->index(row),Qt::EditRole);
}
}
ListModel * model = new ListModel();
for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 4; ++column) {
model->insertRow(1);
qDebug() << model->setData(model->index(row),QVariant::QVariant("halooo"),Qt::EditRole);
qDebug() << model->data(model->index(row),Qt::EditRole);
}
}
To copy to clipboard, switch view to plain text mode
Outputs:
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
false
QVariant(Invalid)
To copy to clipboard, switch view to plain text mode
listmodel.h
#ifndef LISTMODEL_H
#define LISTMODEL_H
#include <QAbstractListModel>
#include <QStringList>
{
Q_OBJECT
public:
explicit ListModel
(QObject *parent
= 0);
Qt
::ItemFlags ListModel
::flags(const QModelIndex &index
) const;
private:
signals:
public slots:
};
#endif // LISTMODEL_H
#ifndef LISTMODEL_H
#define LISTMODEL_H
#include <QAbstractListModel>
#include <QStringList>
class ListModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit ListModel(QObject *parent = 0);
int rowCount( const QModelIndex & parent ) const;
QVariant data( const QModelIndex & index, int role /* = Qt::DisplayRole*/ ) const;
Qt::ItemFlags ListModel::flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index,const QVariant &value, int role);
private:
QStringList stringList;
signals:
public slots:
};
#endif // LISTMODEL_H
To copy to clipboard, switch view to plain text mode
listmodel.cpp
#include "listmodel.h"
#include <QtDebug>
ListModel
::ListModel(QObject *parent
) :{
}
{
// if an invalid row, return empty QVariant
if (index.row() < 0 || index.row() >= 4)
switch( role )
{
case Qt::DisplayRole:
case Qt::EditRole:
{
s
= QString("row [%1]").
arg( index.
row() );
}
default:
}
}
{
if (index.isValid() && role == Qt::EditRole) {
stringList.replace(index.row(), value.toString());
emit dataChanged(index, index);
return true;
}
return false;
}
Qt
::ItemFlags ListModel
::flags(const QModelIndex &index
) const{
if (!index.isValid())
return Qt::ItemIsEnabled;
}
int ListModel
::rowCount(const QModelIndex &parent
) const {
return stringList.count();
}
#include "listmodel.h"
#include <QtDebug>
ListModel::ListModel(QObject *parent) :
QAbstractListModel(parent)
{
}
QVariant ListModel::data( const QModelIndex & index, int role /* = Qt::DisplayRole*/ ) const
{
// if an invalid row, return empty QVariant
if (index.row() < 0 || index.row() >= 4)
return QVariant();
switch( role )
{
case Qt::DisplayRole:
case Qt::EditRole:
{
QString s;
s = QString("row [%1]").arg( index.row() );
return QVariant(s);
}
default:
return QVariant();
}
}
bool ListModel::setData(const QModelIndex &index,
const QVariant &value, int role)
{
if (index.isValid() && role == Qt::EditRole) {
stringList.replace(index.row(), value.toString());
emit dataChanged(index, index);
return true;
}
return false;
}
Qt::ItemFlags ListModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::ItemIsEnabled;
return QAbstractItemModel::flags(index) /*|Qt::ItemIsEditable*/;
}
int ListModel::rowCount(const QModelIndex &parent) const
{
return stringList.count();
}
To copy to clipboard, switch view to plain text mode
It seems like the index passed is never valid, "index.isValid()", so it never sets the data. What's wrong here?
Bookmarks