Russian Qt Forum

Qt => Model-View (MV) => Тема начата: vincent от Декабрь 07, 2009, 17:28



Название: Как обновить модель на основе QSqlQueryModel?
Отправлено: vincent от Декабрь 07, 2009, 17:28
И снова прошу помощи  :)
Читал тут по форуму - вопрос уже задавали, но ответа я не увидел под ситуацию когда модель необходимо просто обновить, а не когда она обновляется сама в результате изменения существующих данных/добавления новых.

Есть модель QSqlQueryModel - создается в конструкторе главной формы:
Код
C++ (Qt)
//...
QSqlQueryModel *model = new QSqlQueryModel(this);
model->setQuery("query_to_bd");
//...
ui->tableView->setModel(model);
 

По ходу работы программы могут быть сделаны изменения в БД, как из самой программы, так и сторонние пользователи могут поменять что-то. Необходимо сделать функцию позволяющую обновить модель model. Читал что, метод reset с легкостью это делает, но доступ у него закрыт. Попробовал создать свой класс на основе QSqlQueryModel с функцией:
Код
C++ (Qt)
//...
void myClass::resetModel()
{
     this->reset();
}
//...
 
Работает, но эта функция не доступна если пробовать ее вызывать у объекта-представления (ui->tableView->model()->resetModel()) который отображает эту модель.
Вот немного в тупике, в какую сторону смотреть? Подскажиет как можно реализовать обновление модели (главное из любого места программы).
Заранее спасибо.


Название: Re: Как обновить модель на основе QSqlQueryModel?
Отправлено: Пантер от Декабрь 07, 2009, 18:06
Код
C++ (Qt)
model->setQuery(QSqlQuery());
model->setQuery("query_to_bd");
 


Название: Re: Как обновить модель на основе QSqlQueryModel?
Отправлено: vincent от Декабрь 07, 2009, 21:07
Код
C++ (Qt)
model->setQuery(QSqlQuery());
model->setQuery("query_to_bd");
 

ОК, так сработает, только как тогда получить доступ к объекту model, если он объявлен в конструкторе формы?


Название: Re: Как обновить модель на основе QSqlQueryModel?
Отправлено: MoPDoBoPoT от Декабрь 07, 2009, 21:14
А что мешает к форме прикрутить метод/слот обновления модели?
Код
C++ (Qt)
void Form::updateTable()
{
  model->setQuery("query_to_bd");
  if (model->lastError().isValid())
      QMessageBox::warning(...);
}
 


Название: Re: Как обновить модель на основе QSqlQueryModel?
Отправлено: vincent от Декабрь 07, 2009, 22:02
Ну очевидно так и придется делать. Просто думал есть более "изящный" метод обращения к объекту model. :)


Название: Re: Как обновить модель на основе QSqlQueryModel?
Отправлено: UA3MQJ от Май 25, 2011, 14:18
я так обновлял:

Код
C++ (Qt)
model.setQuery( model.query().lastQuery() );