PDA

View Full Version : QSortFilterProxyModel not updating View



Shazy
27th July 2016, 20:17
As the title says I have QTableViews with QFilteProxyModels.But when any change is made to the database,the view is not updated.
Here is my code


void Factory::setupDealersTabModel()
{
QSqlQueryModel *model = new QSqlQueryModel(this);
QSqlQuery q(*db);
QString query = "select name,organization,debt from dealers";

if(!q.exec(query)){
QSqlError err = q.lastError();
QMessageBox::critical(this,"Error",err.text());
}
model->setQuery(query);

//test code
dealer_proxy_model = new QSortFilterProxyModel(this);
dealer_proxy_model->setDynamicSortFilter(true);

//set model
ui->dealers_tableview->setModel(dealer_proxy_model);
dealer_proxy_model->setSourceModel(model);
}

void Factory::setupSuppliersTabModel()
{
QSqlQueryModel *model = new QSqlQueryModel(this);
QSqlQuery q(*db);
QString query = "select name,organization,balance from supplier";

if(!q.exec(query)){
QSqlError err = q.lastError();
QMessageBox::critical(this,"Error",err.text());
}
model->setQuery(query);

//set proxy
supplier_proxy_model = new QSortFilterProxyModel(this);
supplier_proxy_model->setDynamicSortFilter(true);

//set model
supplier_proxy_model->setSourceModel(model);
ui->suppliers_tableview->setModel(supplier_proxy_model);
}


---

jefftee
28th July 2016, 00:43
Hi, you don't show how you're updating your database. The model must inform the view that the data has changed. You don't seem to be subclassing QSqlQueryModel and from the docs, I see the following:


The model is read-only by default. To make it read-write, you must subclass it and reimplement setData() and flags(). Another option is to use QSqlTableModel, which provides a read-write model based on a single database table.

So, can you elaborate on how your model is changed?