QAbstractItemModel сбрасывается? QItemDelegate::paint() вызывается слишком часто

Это сводит меня с ума. У меня есть QAbstractItemModel, QSortFilterProxyModel и QStyledItemDelegate. Все подклассы. После выдачи следующего dataChanged() следует вызывать QStyledItemDelegate::paint() только для этих двух индексов (0,0 и 0,1). Однако я подтвердил, что он вызывается для всех видимых ячеек.

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(). Однако никогда не вызывается. Я почти уверен, что не делаю ничего странного с представлением или делегатом. Но и не совсем уверен, где искать.


person kiss-o-matic    schedule 31.01.2013    source источник


Ответы (1)


Двойное сообщение с форумов Qt:

Я немного покопался в стеке вызовов и начал ловить больше слотов. Я ловил свои данные QTableView dataChanged() и paintEvent(). В основном QTableView::dataChanged() искажает координаты.

Очевидно, он ведет себя так, как ожидалось. Абсолютно позорная документация, если вы спросите меня. В сигнале QAbstractItemModel::dataChanged() и слоте QAbstractItemView::dataChanged() отсутствует огромная звездочка.

Надеюсь, что ни у кого больше нет этой проблемы, и если они есть, они могут найти эту тему.

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

person kiss-o-matic    schedule 01.02.2013