QAbstractItemModel - 被重置? QItemDelegate :: paint()经常被调用

时间:2013-01-31 02:40:05

标签: qt paint qabstractitemmodel qitemdelegate qsortfilterproxymodel

这让我发疯了。我有一个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()。但是,它永远不会被称为。我很确定我对视图或委托没什么好玩的。但是,不确定在哪里看。

1 个答案:

答案 0 :(得分:0)

来自Qt论坛的双重帖子:

我在调用堆栈中挖了一点,然后开始捕获更多插槽。我正在捕捉我的QTableView的dataChanged()和paintEvent()。基本上QTableView :: dataChanged()会破坏坐标。

显然表现得像预期的那样。如果你问我,那绝对是可耻的文件。 QAbstractItemModel :: dataChanged()信号和QAbstractItemView :: dataChanged()槽中缺少一个巨大的星号。

希望没有其他人有这个问题,如果他们这样做,他们可以找到这个帖子。

http://qt-project.org/forums/viewthread/14723