Спокойное обновление виджета позже, но когда?

Я не означаю звучать милым, но простой путь состоял бы в том, чтобы добавить новый столбец, который только содержал часть даты и индекс на этом.

5
задан mavroprovato 27 April 2015 в 08:01
поделиться

2 ответа

После проверки исходного кода 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, я этого не проверял.

5
ответ дан 14 December 2019 в 01:10
поделиться

Поведение не задокументировано == не гарантируется, что оно останется неизменным между версиями Qt. Не следует писать код, который зависит от порядка событий рисования относительно других событий.

4
ответ дан 14 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: