这让我发疯了。我有一个QAbstractItemModel,QSortFilterProxyModel和一个QStyledItemDelegate。所有都是子类。在发出以下dataChanged()之后,应该仅为这两个索引(0,0和0,1)调用QStyledItemDelegate :: paint()。但是,我已经确认它被称为所有可见细胞。
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 ) );
}
可以肯定的是,我已将一个插槽连接到我的型号和放大器上。 proxy的modelReset()和layoutChanged()信号。它做了一个简单的printf()。但是,它永远不会被称为。我很确定我对视图或委托没什么好玩的。但是,不确定在哪里看。
答案 0 :(得分:0)
来自Qt论坛的双重帖子:
我在调用堆栈中挖了一点,然后开始捕获更多插槽。我正在捕捉我的QTableView的dataChanged()和paintEvent()。基本上QTableView :: dataChanged()会破坏坐标。
显然表现得像预期的那样。如果你问我,那绝对是可耻的文件。 QAbstractItemModel :: dataChanged()信号和QAbstractItemView :: dataChanged()槽中缺少一个巨大的星号。
希望没有其他人有这个问题,如果他们这样做,他们可以找到这个帖子。