Russian Qt Forum

Qt => Общие вопросы => Тема начата: visor_ua от Сентябрь 14, 2006, 01:11



Название: QSortFilterProxyModel - динамическое изменение
Отправлено: visor_ua от Сентябрь 14, 2006, 01:11
Устанавливаю setSourceModel(QSqlQueryModel* _src);
Можно ли динамически добавлять, изменять данные?
Задача - не перечитывать данные из базы данных в случае добавления.редактирования записи.


Название: QSortFilterProxyModel - динамическое изменение
Отправлено: Alexei от Сентябрь 14, 2006, 12:49
Можно, добавляешь/изменяешь данные в _src, а затем вызываешь метод
QSortFilterProxyModel::clear()


Название: QSortFilterProxyModel - динамическое изменение
Отправлено: visor_ua от Сентябрь 14, 2006, 17:16
Вот как раз до этого и дошел, что QSqlQueryModel - не пошучается в нем изменить результаты запроса кроме как делать новый query к базе данных


Название: QSortFilterProxyModel - динамическое изменение
Отправлено: Alexei от Сентябрь 15, 2006, 07:13
Тогда вместо QSqlQueryModel надо использовать другой класс, например, потомок от QStandardItemModel:

Код:

class SqlSelectModel : public QStandardItemModel
{
public:
  SqlSelectModel(QObject* parent = 0) : QStandardItemModel(parent) {};
  SqlSelectModel(const QString& query, const QSqlDatabase& db = QSqlDatabase());
  void setQuery(const QString& query, const QSqlDatabase& db = QSqlDatabase());
  Qt::ItemFlags flags(const QModelIndex& index) const;
};

SqlSelectModel::SqlSelectModel(const QString& query, const QSqlDatabase& db /* = QSqlDatabase */) :
  QStandardItemModel(0, 0)
{
  setQuery(query, db);
}

void SqlSelectModel::setQuery(const QString &query, const QSqlDatabase &db)
{
  clear();
  QSqlQuery sql_query(query, db);
  QSqlRecord rec = sql_query.record();
  insertColumns(0, rec.count());
  for (int i = 0; i < rec.count(); i++)
    setHeaderData(i, Qt::Horizontal, rec.fieldName(i), Qt::DisplayRole);
  int row = 0;
  while (sql_query.next())
  {
    insertRow(row);
    for (int i = 0; i < rec.count(); i++)
    {
      setData(index(row, i), sql_query.value(i), Qt::DisplayRole);
      row++;
  }
}

Qt::ItemFlags SqlSelectModel::flags(const QModelIndex& index) const
{
  return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}


Название: QSortFilterProxyModel - динамическое изменение
Отправлено: visor_ua от Сентябрь 17, 2006, 00:06
ДА, в такой способ все четко