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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как обновить модель на основе QSqlQueryModel?  (Прочитано 8987 раз)
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()) который отображает эту модель.
Вот немного в тупике, в какую сторону смотреть? Подскажиет как можно реализовать обновление модели (главное из любого места программы).
Заранее спасибо.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 07, 2009, 18:06 »

Код
C++ (Qt)
model->setQuery(QSqlQuery());
model->setQuery("query_to_bd");
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vincent
Гость
« Ответ #2 : Декабрь 07, 2009, 21:07 »

Код
C++ (Qt)
model->setQuery(QSqlQuery());
model->setQuery("query_to_bd");
 

ОК, так сработает, только как тогда получить доступ к объекту model, если он объявлен в конструкторе формы?
Записан
MoPDoBoPoT
Гость
« Ответ #3 : Декабрь 07, 2009, 21:14 »

А что мешает к форме прикрутить метод/слот обновления модели?
Код
C++ (Qt)
void Form::updateTable()
{
  model->setQuery("query_to_bd");
  if (model->lastError().isValid())
      QMessageBox::warning(...);
}
 
Записан
vincent
Гость
« Ответ #4 : Декабрь 07, 2009, 22:02 »

Ну очевидно так и придется делать. Просто думал есть более "изящный" метод обращения к объекту model. Улыбающийся
Записан
UA3MQJ
Гость
« Ответ #5 : Май 25, 2011, 14:18 »

я так обновлял:

Код
C++ (Qt)
model.setQuery( model.query().lastQuery() );
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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