0

这真让我抓狂。我有一个 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 ) );
}

可以肯定的是,我已经将一个插槽连接到我的模型和代理的 modelReset() 和 layoutChanged() 信号。它做了一个简单的 printf()。但是,它永远不会被调用。我很确定我没有对视图或委托做任何时髦的事情。但是,也不完全确定在哪里看。

4

1 回答 1

0

来自 Qt 论坛的双重帖子:

我稍微挖掘了调用堆栈,并开始捕获更多插槽。我正在捕捉我的 QTableView 的 dataChanged() 和 paintEvent() 的。基本上 QTableView::dataChanged() 正在破坏坐标。

它的行为显然符合预期。如果你问我,这绝对是可耻的文件。QAbstractItemModel::dataChanged() 信号和 QAbstractItemView::dataChanged() 插槽中缺少一个巨大的星号。

希望没有其他人有这个问题,如果他们有,他们可以找到这个线程。

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

于 2013-02-01T05:34:16.373 回答