scrollTo not working properly
-
wrote on 25 Jul 2017, 09:58 last edited by Megamouse
When using this code inside a tablewidget refresh function the scrollTo sometimes jumps to undefined places.
gameList->selectRow(row); gameList->sortByColumn(m_sortColumn, m_colSortOrder); gameList->verticalHeader()->setMinimumSectionSize(m_Icon_Size.height()); gameList->verticalHeader()->setMaximumSectionSize(m_Icon_Size.height()); gameList->resizeRowsToContents(); gameList->resizeColumnToContents(0); gameList->scrollTo(gameList->currentIndex(), QAbstractItemView::PositionAtCenter);
Adding
gameList->scrollToBottom(); gameList->scrollToTop();
directly in front of the scrollTo(...) fixes this weird issue. The scroll now always centers the desired row.
We are wondering if this is a Qt bug or if we missed something.
It's not really that important since the workaround is doing fine, but we are really curious if that can be avoided.Thx
-
When using this code inside a tablewidget refresh function the scrollTo sometimes jumps to undefined places.
gameList->selectRow(row); gameList->sortByColumn(m_sortColumn, m_colSortOrder); gameList->verticalHeader()->setMinimumSectionSize(m_Icon_Size.height()); gameList->verticalHeader()->setMaximumSectionSize(m_Icon_Size.height()); gameList->resizeRowsToContents(); gameList->resizeColumnToContents(0); gameList->scrollTo(gameList->currentIndex(), QAbstractItemView::PositionAtCenter);
Adding
gameList->scrollToBottom(); gameList->scrollToTop();
directly in front of the scrollTo(...) fixes this weird issue. The scroll now always centers the desired row.
We are wondering if this is a Qt bug or if we missed something.
It's not really that important since the workaround is doing fine, but we are really curious if that can be avoided.Thx
wrote on 25 Jul 2017, 10:41 last edited by@Megamouse
I am not the expert but what I heard is that there is some kind of delay on scrollTo() function. So I had to use singleshot 500ms to make it work properly. -
When using this code inside a tablewidget refresh function the scrollTo sometimes jumps to undefined places.
gameList->selectRow(row); gameList->sortByColumn(m_sortColumn, m_colSortOrder); gameList->verticalHeader()->setMinimumSectionSize(m_Icon_Size.height()); gameList->verticalHeader()->setMaximumSectionSize(m_Icon_Size.height()); gameList->resizeRowsToContents(); gameList->resizeColumnToContents(0); gameList->scrollTo(gameList->currentIndex(), QAbstractItemView::PositionAtCenter);
Adding
gameList->scrollToBottom(); gameList->scrollToTop();
directly in front of the scrollTo(...) fixes this weird issue. The scroll now always centers the desired row.
We are wondering if this is a Qt bug or if we missed something.
It's not really that important since the workaround is doing fine, but we are really curious if that can be avoided.Thx
@Megamouse
what data does your list view contain? Does it contain multi-line text?
I guess not all of your items are layouted yet when you callscrollTo()
?Try the following (you need to subclass the list view widget since the methods are protected):
void myListView::layoutItems() { scheduleDelayedItemsLayout(); executeDelayedItemsLayout(); }
-
wrote on 25 Jul 2017, 15:23 last edited by Megamouse
So: after the hint with toScroll delay we noticed that the table layout/state might not be fully up to date with its contents.
I went through the table-filling code step by step and found that one of our devs used setRowCount(0); to clear the table without losing the headers .
I replaced it with clearContents(); and now it seems to be working.If it still has issues I may try the schedule .
Thanks for the inspiration!
2/4