QHeaderView - length returns wrong value fix

setSectionHidden called with (logindex, true) will
sometimes prevent a (correct) call to
resizeSection(logicalIndex, 0).
This seems a bit odd - however it does execute
d->doDelayedResizeSections().
Therefore the section is going to be hidden later.

However it is a problem that the length meanwhile is wrong.
(That is a value that is not the sum of the sections)

This is fixed by execute updates before returning the
length.

Task-number: QTBUG-14242

Change-Id: Ia1d2f6db3213792b250a6a37942b56554261cd3a
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
This commit is contained in:
Thorbjørn Lund Martsum 2012-01-18 15:34:06 +01:00 committed by Qt by Nokia
parent 5635823e17
commit 125016ad24
2 changed files with 23 additions and 0 deletions

View File

@ -517,6 +517,8 @@ void QHeaderView::setOffsetToLastSection()
int QHeaderView::length() const
{
Q_D(const QHeaderView);
d->executePostedLayout();
d->executePostedResize();
//Q_ASSERT(d->headerLength() == d->length);
return d->length;
}

View File

@ -181,6 +181,7 @@ private slots:
void QTBUG7833_sectionClicked();
void QTBUG8650_crashOnInsertSections();
void QTBUG12268_hiddenMovedSectionSorting();
void QTBUG14242_hideSectionAutoSize();
void initialSortOrderRole();
@ -2072,6 +2073,26 @@ void tst_QHeaderView::QTBUG12268_hiddenMovedSectionSorting()
QCOMPARE(view.horizontalHeader()->hiddenSectionCount(), 1);
}
void tst_QHeaderView::QTBUG14242_hideSectionAutoSize()
{
QTableView qtv;
QStandardItemModel amodel(4, 4);
qtv.setModel(&amodel);
QHeaderView *hv = qtv.verticalHeader();
hv->setDefaultSectionSize(25);
hv->setResizeMode(QHeaderView::ResizeToContents);
qtv.show();
hv->hideSection(0);
int afterlength = hv->length();
int calced_length = 0;
for (int u = 0; u < hv->count(); ++u)
calced_length += hv->sectionSize(u);
QVERIFY(calced_length == afterlength);
}
void tst_QHeaderView::initialSortOrderRole()
{
QTableView view;