QTableView 不刷新外键
QTableView does not refresh foreign keys?
我有一个QMainWindow
,上面有两个QTableViews
。 每个QTableView
都有自己的QSqlRelationalTableModel
。 我使用 OnManualSubmit
作为两种模型的编辑策略。 两个模型都命中同一个数据库,并使用setTable
填充(每个模型命中不同的表),后跟 select()
。
第二个表的模型设置了适当的调用,以setRelation
将其链接到用于填充第一个模型的表。 关于第二种(儿童)观点,我称之为view->setItemDelegate(new QSqlRelationalDelegate(view));
一切似乎都很好:第一个视图中显示的数据列在第二个视图相应字段的下拉列表中。
我的问题:当我在第一个(父)视图添加、编辑或删除记录并将其保存到数据库时,我应该如何刷新第二个视图以使下拉列表准确?
第二个(子)视图中可能存在未保存的编辑内容,我不想丢失这些编辑内容,也不想保存它们。 我只想适当地更新下拉列表。
我尝试了child_model->relationModel(fk_col)->select();
并且有效,但child_model->relationModel(fk_col)->columnCount();
表明选择正在父表的所有字段上运行,这似乎是不必要的悲观。
这是我第一次尝试使用<QtSql>
和QTableView
,所以我可能错过了一些基本的东西。 也许有一种方法可以对两个视图使用相同的模型,并且刷新会自动发生? 刷新子视图下拉列表的适当方法是什么?
QSqlRelationalTableModel
执行的查询不再包含外键。
例如,使用此数据库结构:
CREATE TABLE countries (id, name);
CREATE TABLE cities(id, name, id_country);
查询将如下所示:
SELECT id, name, country_name FROM cities
LEFT JOIN countries ON id_country = countries.id;
这意味着,如果联接的表发生更改,则必须重新执行查询才能更新表。
要自动刷新,我想你会有:
- 使用常规
QSqlTableModel
将实际外键保留在模型中, - 编写
QAbstractItemDelegate
类以显示映射值并创建QComboBox
编辑器。 - 以在第一个模型更改时触发视图上映射列区域的重绘。
- QTableView:endMoveRows在模型中重置水平页眉大小
- 将QIcon添加到QTableView单元格
- 是否可以配置提升日志刷新?
- 如何在qt中同步应用程序和显示器的刷新率?
- 如何在QTableView中排序和更改日期格式
- QTableview Search
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- QTableView 拉伸标头,但保持交互性
- 在 directx11 代码中更改全屏模式下的刷新率不起作用
- qtableView 在订购项目到达时添加和显示它们任意?
- 如何在 Windows 中立即刷新文件夹图标
- QTableView 不会更新数据
- 将自定义样式添加到 QTableview 中添加的按钮
- QTableView:即时更改行计数
- 刷新来自Qpid质子连接的所有消息而不是等待?
- 如何在SQLite表更新期间刷新QTableView
- QTableView 不刷新外键
- 在QTableView中用作编辑器的QComboBox中刷新选项
- QTableView垂直调整未刷新的数据大小