更改数据库连接后如何更新QSqlTableModel

时间:2011-12-14 16:51:52

标签: c++ database qt model-view qabstracttablemodel

我的课程来自QSqlRelationalTableModel。 我使用SQLite数据库。 我需要更改数据库文件。 我关闭旧的数据库文件,调用SetDatabaseName(“新文件的路径”)并打开新的数据库文件。 现在我只是为模型调用select(),但它返回false。 如果我调用setTable(“table”)并且仅在select()之后,一切正常... 但是桌子的名字是一样的......

我没有找到任何允许通知模型数据库连接已被更改的方法.... 您知道更好的方式来通知模型吗?


确定。我再次回到这个话题。

更改db之后,我必须使用相同的表名调用setTable()来重新启动表模型。 我没有找到更好的方法来重新启动表视图,我打电话给

pTableView->setModel(NULL);
pTableView->setModel(model);

这会产生大量不必要的代码调用,但在其他情况下,表视图不知道表模型中的更改(例如列数)。

我没有找到更好的方法来重新初始化QSqlTableModelQTableView。一些想法?

2 个答案:

答案 0 :(得分:2)

// create your model(parent=0, QSqlDatabase::database());
// set your table model->setTable("tablename");
tableview->setModel(this->model)
bool ok = model->select() // model should populate itself and refresh tableView as well

答案 1 :(得分:0)

那是我的错:( 在源代码的帮助下,我发现在哪些情况下select()返回false。 我的新数据库表中的一个字段名错过了一个字母:(因此,QSqlQuery与select返回错误。 setTable调用更新表的字段名,因此select返回true。