diff options
Diffstat (limited to 'listmodel.cpp')
-rw-r--r-- | listmodel.cpp | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/listmodel.cpp b/listmodel.cpp index d8b6ccc..437ec3e 100644 --- a/listmodel.cpp +++ b/listmodel.cpp @@ -9,18 +9,25 @@ #include <QString> #include <QSqlQuery> +#include <QSqlError> +#include <QDebug> + #include "listmodel.h" #include "listitem.h" ListModel::ListModel(const QString table, QObject *parent) : QAbstractItemModel(parent), mTable(table){ QString updateQuery = QString("UPDATE %1 SET t%1name = :name WHERE i%1id = :id").arg(mTable); - mUpdateQuery = new QSqlQuery(updateQuery); - QString insertQuery = QString("INSERT INTO %1(t%1name) VALUES(:name)").arg(mTable); - mInsertQuery = new QSqlQuery(insertQuery); + mUpdateQuery = new QSqlQuery; + mUpdateQuery->prepare(updateQuery); + QString insertQuery = QString("INSERT INTO %1 (t%1name) VALUES(:name)").arg(mTable); + mInsertQuery = new QSqlQuery; + mInsertQuery->prepare(insertQuery); QString deleteQuery = QString("DELETE FROM %1 WHERE t%1name = :name").arg(mTable); - mDeleteQuery = new QSqlQuery(deleteQuery); + mDeleteQuery = new QSqlQuery; + mDeleteQuery->prepare(deleteQuery); QString idQuery = QString("SELECT i%1id FROM %1 WHERE t%1name = :name").arg(mTable); - mIdQuery = new QSqlQuery(idQuery); + mIdQuery = new QSqlQuery; + mIdQuery->prepare(idQuery); populate(); } @@ -29,13 +36,20 @@ ListModel::~ListModel(){ } QModelIndex ListModel::index(int row, int column, const QModelIndex &) const{ - if(column != 0){ + if((column != 0) || (row >= mItems.size()) || (row < 0)){ return QModelIndex(); } - if(row > mItems.size()){ - return QModelIndex(); + return createIndex(row, 0, mItems.at(row)); +} + +QModelIndex ListModel::index(const QVariant &data) const{ + for(int i = 0; i < rowCount(); ++i){ + ListItem *item = mItems.at(i); + if(data.toString() == item->name()){ + return createIndex(i, 0, item); + } } - return createIndex(row, 0); + return QModelIndex(); } int ListModel::rowCount(const QModelIndex &) const{ @@ -78,7 +92,7 @@ bool ListModel::removeRows(int row, int count, const QModelIndex&){ if(row > mItems.size()){ return false; } - if((row - count - mItems.size()) < 0){ + if((row + count) > rowCount()){ return false; } beginRemoveRows(QModelIndex(), row, row + (count - 1)); @@ -99,7 +113,7 @@ bool ListModel::setData(const QModelIndex &idx, const QVariant &data, int role){ Q_ASSERT(item != 0); int id = item->id(); bool success = false; - if(id == -1){ + if(id > -1){ //this is an update mUpdateQuery->bindValue(":id", id); success = mUpdateQuery->exec(); @@ -132,7 +146,7 @@ bool ListModel::addItem(const QVariant &item){ if(insertRows(0, 1, QModelIndex())){ QModelIndex idx = index(0, 0); if(idx.isValid()){ - success = setData(idx, item); + success = setData(idx, item, Qt::EditRole); } } return success; @@ -174,7 +188,6 @@ bool ListModel::renameItem(const QVariant &oldName, const QVariant &newName){ void ListModel::populate(){ QString query = QString("SELECT i%1id, t%1name FROM %1 ORDER BY t%1name").arg(mTable); QSqlQuery q(query); - q.exec(); while(q.next()){ ListItem *newItem = new ListItem(q.value(1).toString(), q.value(0).toInt()); mItems << newItem; |