Qt 6.8.0中QSqlTableModel的rowsRemoved信号未触发问题求助
问题分析与解决方案
1. 变量名不匹配导致信号未连接
你代码里创建的模型对象是model,但connect语句里用的是_model,这直接导致信号与槽根本没建立连接,自然收不到rowsRemoved信号。修正变量名即可:
connect(model, &QSqlTableModel::rowsRemoved, this, [=](const QModelIndex &parent, int first, int last) { qDebug() << first << last; });
2. OnManualSubmit策略下的信号触发时机
当使用QSqlTableModel::OnManualSubmit编辑策略时,removeRow()只是在模型中标记该行待删除,并不会立即触发rowsRemoved信号。只有当调用submitAll()且数据库操作成功后,模型同步数据库状态,此时才会发出rowsRemoved信号。
如果提交过程中出现错误(比如数据库约束冲突),submitAll()会返回false,此时模型会保留待删除标记,也不会触发信号。可以通过model->lastError()检查错误原因。
额外验证建议
- 可以在
submitAll()之后打印模型的行数,确认是否与数据库同步 - 测试时可临时将编辑策略改为
QSqlTableModel::OnRowChange,此时调用removeRow()会立即提交并触发rowsRemoved,用来验证信号连接是否正常
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

