【发布时间】:2022-11-10 18:48:24
【问题描述】:
在我的 Qt (6.3.1) 应用程序中,对于我开发的模型,我注意到 submit() 方法一直被调用。
经过一些调试,我注意到,在void QTableView::setSelectionModel/QTreeView::setSelectionModel,这是:
if (d->selectionModel) {
// support row editing
connect(d->selectionModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
d->model, SLOT(submit()));
}
QAbstractItemModel::submit() 的文档提到“此功能通常用于行编辑”,这意味着这是故意的。
与让/要求应用程序开发人员自己创建连接的替代方案相比,这种做事方式有不止一个问题:
- 视图似乎没有阻止创建此连接的属性,因此该行为不仅仅是默认行为,它是强制性的。
- 除了查看 Qt 的源代码外,我看不出有任何方法知道该怎么做。如果需要,我宁愿自己创建连接。
- 似乎只有
QSqlTableModel有处理这个问题的机制(editStrategy()),但我在QAbstractItemModel和QAbstractTableModel都找不到任何东西。
-> 什么是希望上述连接成为的充分理由总是创建?
或者我认为这个设计是一个糟糕的设计可能是错误的?
【问题讨论】: