You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:22:35