这让我发疯了。 我有一个QAbstractItemModel,QSortFilterProxyModel和一个QStyledItemDelegate。 所有这些都是子类。 发出以下 dataChanged() 后,应该只为这两个索引(0,0 和 0,1)调用 QStyledItemDelegate::p aint()。 但是,我已经确认它被调用用于所有可见单元格。
void my_model_t::emit_data_changed()
{
QModelIndex start_ix = createIndex( 0, 0 );
QModelIndex end_ix = createIndex( 0, 1 );
emit( dataChanged( start_ix, end_ix ) );
}
可以肯定的是,我已经将一个插槽连接到我的模型和代理的modelReset()和layoutChanged()信号。 它做一个简单的printf()。 但是,它永远不会被调用。 我很确定我对视图或委托没有任何时髦的事情。 但是,也不确定去哪里看。
来自Qt论坛的双篇文章:
我稍微挖掘了一下调用堆栈,并开始捕获更多插槽。 我正在捕捉我的QTableView的dataChanged()和paintEvent()的。 基本上QTableView::d ataChanged()正在修改坐标。
它的行为显然符合预期。 如果你问我,绝对可耻的文档。 QAbstractItemModel::d ataChanged() 信号和 QAbstractItemView::d ataChanged() 插槽中缺少一个巨大的星号。
希望没有其他人有这个问题,如果他们有,他们可以找到这个线程。
http://qt-project.org/forums/viewthread/14723