summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2020-03-10 21:42:11 +0100
committerChristian Ehrlicher <ch.ehrlicher@gmx.de>2020-03-21 07:05:27 +0100
commit1e03015d551fb1542d43f54f8b64cf721da51913 (patch)
tree38a22225b7dbca3a9258d7061c5161002f85d001 /src/widgets/itemviews
parentd55dad94f984333c11a7f01fbd5d8c07e405129f (diff)
QTableView: Make sure to repaint all needed cells during resizing
Don't try to update the scrollarea geometry while resizing a row or column since this may lead in flickering and artifacts, esp when the scroll mode is scrollPerItems. Instead do the calculation only when the resize is finished. Fixes: QTBUG-72870 Fixes: QTBUG-82595 Change-Id: Id6903c00485b3be6ed54bd5f9bcafdda6da21598 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r--src/widgets/itemviews/qtableview.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp
index 81fceba8dc..a8da6530a4 100644
--- a/src/widgets/itemviews/qtableview.cpp
+++ b/src/widgets/itemviews/qtableview.cpp
@@ -2939,14 +2939,17 @@ void QTableView::timerEvent(QTimerEvent *event)
Q_D(QTableView);
if (event->timerId() == d->columnResizeTimerID) {
- updateGeometries();
- killTimer(d->columnResizeTimerID);
- d->columnResizeTimerID = 0;
+ const int oldScrollMax = horizontalScrollBar()->maximum();
+ if (horizontalHeader()->d_func()->state != QHeaderViewPrivate::ResizeSection) {
+ updateGeometries();
+ killTimer(d->columnResizeTimerID);
+ d->columnResizeTimerID = 0;
+ }
QRect rect;
int viewportHeight = d->viewport->height();
int viewportWidth = d->viewport->width();
- if (d->hasSpans()) {
+ if (d->hasSpans() || horizontalScrollBar()->value() == oldScrollMax) {
rect = QRect(0, 0, viewportWidth, viewportHeight);
} else {
for (int i = d->columnsToUpdate.size()-1; i >= 0; --i) {
@@ -2964,14 +2967,17 @@ void QTableView::timerEvent(QTimerEvent *event)
}
if (event->timerId() == d->rowResizeTimerID) {
- updateGeometries();
- killTimer(d->rowResizeTimerID);
- d->rowResizeTimerID = 0;
+ const int oldScrollMax = verticalScrollBar()->maximum();
+ if (verticalHeader()->d_func()->state != QHeaderViewPrivate::ResizeSection) {
+ updateGeometries();
+ killTimer(d->rowResizeTimerID);
+ d->rowResizeTimerID = 0;
+ }
int viewportHeight = d->viewport->height();
int viewportWidth = d->viewport->width();
int top;
- if (d->hasSpans()) {
+ if (d->hasSpans() || verticalScrollBar()->value() == oldScrollMax) {
top = 0;
} else {
top = viewportHeight;