Witam.
Piszę już swój właściwy program, doszedłem do momentu w którym mam problem z własnym modelem.Nie wiem jak zabrać się do tego, aby móc edytować wpisy, dodawać nowe lub też je usuwać.
Mój model odnosi się do QList, w której przetrzymuję wszystkich użytkowników. User to klasa posiadająca pola: name, password, oraz podklasę przetrzymującą rózne dane liczbowe, dlatego też mój User nie może byc po prostu drugą QList składającą się z 2 QString, co ułatwiłoby mi znacznie implementację.
Mój model wygląda następująco:
class UserModel : public QAbstractListModel
{
Q_OBJECT
public:
UserModel(const QList<User> &user,QObject *parent = 0);
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
bool UserModel::insertRow(int row, const QModelIndex &parent);
bool UserModel::removeRow(int row, const QModelIndex &parent);
private:
QList<User> usersModel;
};
Plik usermodel.cpp
UserModel::UserModel(const QList<User> &user, QObject *parent) : QAbstractListModel(parent)
{
usersModel = user;
}
int UserModel::rowCount(const QModelIndex &parent) const
{
return usersModel.size();
}
QVariant UserModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid()) return QVariant();
if(index.row() >= usersModel.size()) return QVariant();
if(role == Qt::DisplayRole )
return QVariant(usersModel.at(index.row()).ShowUser());
else
return QVariant();
}
Qt::ItemFlags UserModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::ItemIsEnabled;
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
}
bool UserModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (index.isValid() && role == Qt::EditRole)
{
QString tmpName = value.toString();
usersModel.append(User());
emit dataChanged(index, index);
return true;
}
return false;
}
Jeśli dodam sobie użytkowników "ręcznie" w kodzie przed uruchomieniem programu to wszystko działa ok, problem jeśli dodaję ich np wciskając button AddUser, tam podaję nazwę użytkownika oraz hasło. Wiem że poprawnie się dodają, bo wyświetlam sobie komunikaty w konsoli pochodzące z konstruktorów klasy User. Nawet jeśli "zaktualizuję" sobię mój ListView, to lista użytkowników pozostaje taka sama. Nie wiem czy poprawnie rozumiem działanie wszystkich metod, ponieważ z moim angielskim jest troche słabo, a po polsku jest niestety bardzo mało informacji.
Z góry dziękuję za pomoc i poświęcony czas! Pozdrawiam