Russian Qt Forum
Ноябрь 25, 2024, 07:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSortFilterProxyModel - динамическое изменение  (Прочитано 4374 раз)
visor_ua
Гость
« : Сентябрь 14, 2006, 01:11 »

Устанавливаю setSourceModel(QSqlQueryModel* _src);
Можно ли динамически добавлять, изменять данные?
Задача - не перечитывать данные из базы данных в случае добавления.редактирования записи.
Записан
Alexei
Гость
« Ответ #1 : Сентябрь 14, 2006, 12:49 »

Можно, добавляешь/изменяешь данные в _src, а затем вызываешь метод
QSortFilterProxyModel::clear()
Записан
visor_ua
Гость
« Ответ #2 : Сентябрь 14, 2006, 17:16 »

Вот как раз до этого и дошел, что QSqlQueryModel - не пошучается в нем изменить результаты запроса кроме как делать новый query к базе данных
Записан
Alexei
Гость
« Ответ #3 : Сентябрь 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;
}
Записан
visor_ua
Гость
« Ответ #4 : Сентябрь 17, 2006, 00:06 »

ДА, в такой способ все четко
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 21.