Я не означаю звучать милым, но простой путь состоял бы в том, чтобы добавить новый столбец, который только содержал часть даты и индекс на этом.
После проверки исходного кода QWidget :: update () я обнаружил, что он вызывает этот метод в src / gui / kernel / qwidget.cpp: 9544
:
void QWidget::update(const QRect &rect)
{
if (!isVisible() || !updatesEnabled() || rect.isEmpty())
return;
if (testAttribute(Qt::WA_WState_InPaintEvent)) {
QApplication::postEvent(this, new QUpdateLaterEvent(rect));
return;
}
if (hasBackingStoreSupport()) {
QTLWExtra *tlwExtra = window()->d_func()->maybeTopData();
if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore)
tlwExtra->backingStore->markDirty(rect, this);
} else {
d_func()->repaint_sys(rect);
}
}
Как видите, QUpdateLaterEvent
отправляется, только если update () уже вызван из метода paintEvent ().
Вы также можете проверить QWidget :: repaint (const QRect & rect)
исходный код в строке 9456 - отсутствует проверка testAttribute (Qt :: WA_WState_InPaintEvent)
.
РЕДАКТИРОВАТЬ
QUpdateLaterEvent
отправляется как Qt :: NormalEventPriority
, поэтому оно обрабатывается после всех других событий с обычным приоритетом (см. src / corelib / kernel / qcoreapplication.cpp: 971
и : 1003
). Вы также можете изучить код compressEvent, я этого не проверял.
Поведение не задокументировано == не гарантируется, что оно останется неизменным между версиями Qt. Не следует писать код, который зависит от порядка событий рисования относительно других событий.