Название: Модель на основе QSqlQueryModel с режимом редактирования и полем checkbox
Отправлено: alex-v от Июнь 24, 2011, 16:01
Добрый день! Нужна своя модель на основе QSqlQueryModel с возможность редактирования некоторых полей. Эта задача решена. Остаётся непонятным как реализовать изменения состояния поля БД когда ему в QTableView соответствует checkable поле. Подскажите как это сделать? Вот мой код: #include "OrdersSqlModel.h"
#include <QSqlQuery>
OrdersSqlModel::OrdersSqlModel(QObject *parent) : QSqlQueryModel(parent) { } //---------------------------------------------------------------------
bool OrdersSqlModel::setData(const QModelIndex &index, const QVariant &value, int role) { QModelIndex primaryKeyIndex = QSqlQueryModel::index(index.row(), 0); const int id = data(primaryKeyIndex).toInt(); QString fieldName;
if (index.column()==1) fieldName = "fio"; else if (index.column()==3) fieldName = "stoimost_byr"; else if (index.column()==4) fieldName = "predoplata"; else if (index.column()==6) fieldName = "dolg_robert"; else if (index.column()==7) fieldName = "vozvrat_robert"; else if (index.column()==8) fieldName = "vozvrat_date"; else if (index.column()==9) fieldName = "zp_montazhniki"; else if (index.column()==12) fieldName = "zp_director"; else if (index.column()==13) fieldName = "zp_otkosy"; else if (index.column()==14) fieldName = "count_windows"; else if (index.column()==15) fieldName = "count_skrutki"; else if (index.column()==16) fieldName = "count_balkony"; else if (index.column()==17) fieldName = "count_otkosy"; else if (index.column()==18) fieldName = "count_mask_setki"; else return false;
QSqlQuery sql;
bool res = sql.exec(QString("UPDATE orders SET %1='%2' WHERE id=%3").arg(fieldName).arg(value.toString()).arg(id));
setQuery(query().lastQuery());
return res; } //---------------------------------------------------------------------
Qt::ItemFlags OrdersSqlModel::flags(const QModelIndex &index) const { if (index.column()==1 || index.column()==3 || index.column()==4 || index.column()==6 || index.column()==7 || index.column()==8 || index.column()==9 || index.column()==12 || index.column()==13 || index.column()==14 || index.column()==15 || index.column()==16 || index.column()==17 || index.column()==18) return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled;
if (index.column()==2) return Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable;
return Qt::ItemIsEnabled; } //---------------------------------------------------------------------
QVariant OrdersSqlModel::data(const QModelIndex &index, int role) const { if (index.column()==2) { if (role==Qt::DisplayRole) return QVariant();
const int state = QSqlQueryModel::data(index).toInt(); return QVariant( state ? Qt::Checked : Qt::Unchecked ); }
return QSqlQueryModel::data(index, role); } //---------------------------------------------------------------------
Название: Re: Модель на основе QSqlQueryModel с режимом редактирования и полем checkbox
Отправлено: alex-v от Июнь 24, 2011, 16:02
в таблице на экране флажек в checkable поле не меняется вообще... что тут исправить?
Название: Re: Модель на основе QSqlQueryModel с режимом редактирования и полем checkbox
Отправлено: MoPDoBoPoT от Июнь 24, 2011, 21:10
Так ты в методе setData() пропустил обработку этого столбца (index.column()==2)
Название: Re: Модель на основе QSqlQueryModel с режимом редактирования и полем checkbox
Отправлено: alex-v от Июнь 25, 2011, 09:19
Да. Спасибо. Упустил как-то... Еще такой вопрос - в поле с чекбоксом рядом еще стоит спин-бокс, где можно менять число этого поля (т.к. оно INTEGER в базе). Как скрыть этот спин-бокс?
Название: Re: Модель на основе QSqlQueryModel с режимом редактирования и полем checkbox
Отправлено: MoPDoBoPoT от Июнь 25, 2011, 13:45
Попробуй для этого столбца убрать флаг Qt::ItemIsEditable
Название: Re: Модель на основе QSqlQueryModel с режимом редактирования и полем checkbox
Отправлено: alex-v от Июнь 25, 2011, 14:03
да. работает. благодарю. последний наверно вопрос - как сделать чтобы чекбокс был посреди поля, а не по левому краю? С Богом.
Название: Re: Модель на основе QSqlQueryModel с режимом редактирования и полем checkbox
Отправлено: RVZ от Июль 13, 2011, 09:25
Доброго времени суток! В общем идея такая есть модель по типу той которая описана здесь только в основе SQL SELECT *, 0 AS Choice , '' AS Coment FROM myTable
То есть поля Choice и Coment в базе не существуют и инфа из них требуется только при принятии решения о формировании отчета по данному объекту(из списка приведенного в моделе). Подскажите пожалуйста как мне сделать так чтобы модель хранила данные ЧекБоксов(Choice) и Едитов(Coment) без отправки в базу данных? Заранее всем спасибо.
|