Fix the size calculation of QHeaderView when stylesheet is used
When calculating the header section size based on its contents when a stylesheet is used, the size hints from the stylesheet are used. In case if the stylesheet specifies only one of the sizes, the other is set to -1. Because of this the actual content size is ignored. The solution is to calculate the size based on the application style, in case if it's not specified in the stylesheet. Fixes: QTBUG-75615 Change-Id: I3453fa623d75b6b32832edf753de6e3e4e7f5a22 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This commit is contained in:
parent
139246faa3
commit
ffac899576
@ -5035,6 +5035,14 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op
|
||||
QRenderRule subRule = renderRule(w, opt, PseudoElement_HeaderViewSection);
|
||||
if (subRule.hasGeometry() || subRule.hasBox() || !subRule.hasNativeBorder() || subRule.hasFont) {
|
||||
sz = subRule.adjustSize(csz);
|
||||
if (!sz.isValid()) {
|
||||
// Try to set the missing values based on the base style.
|
||||
const auto baseSize = baseStyle()->sizeFromContents(ct, opt, sz, w);
|
||||
if (sz.width() < 0)
|
||||
sz.setWidth(baseSize.width());
|
||||
if (sz.height() < 0)
|
||||
sz.setHeight(baseSize.height());
|
||||
}
|
||||
if (!subRule.hasGeometry()) {
|
||||
QSize nativeContentsSize;
|
||||
bool nullIcon = hdr->icon.isNull();
|
||||
|
@ -216,6 +216,7 @@ private slots:
|
||||
void QTBUG14242_hideSectionAutoSize();
|
||||
void QTBUG50171_visualRegionForSwappedItems();
|
||||
void QTBUG53221_assertShiftHiddenRow();
|
||||
void QTBUG75615_sizeHintWithStylesheet();
|
||||
void ensureNoIndexAtLength();
|
||||
void offsetConsistent();
|
||||
|
||||
@ -2606,6 +2607,26 @@ void tst_QHeaderView::QTBUG53221_assertShiftHiddenRow()
|
||||
QCOMPARE(tableView.verticalHeader()->isSectionHidden(2), true);
|
||||
}
|
||||
|
||||
void tst_QHeaderView::QTBUG75615_sizeHintWithStylesheet()
|
||||
{
|
||||
QTableView tableView;
|
||||
QStandardItemModel model(1, 1);
|
||||
tableView.setModel(&model);
|
||||
tableView.show();
|
||||
|
||||
const auto headerView = tableView.horizontalHeader();
|
||||
const auto oldSizeHint = headerView->sizeHint();
|
||||
QVERIFY(oldSizeHint.isValid());
|
||||
|
||||
tableView.setStyleSheet("QTableView QHeaderView::section { height: 100px;}");
|
||||
QCOMPARE(headerView->sizeHint().width(), oldSizeHint.width());
|
||||
QCOMPARE(headerView->sizeHint().height(), 100);
|
||||
|
||||
tableView.setStyleSheet("QTableView QHeaderView::section { width: 100px;}");
|
||||
QCOMPARE(headerView->sizeHint().height(), oldSizeHint.height());
|
||||
QCOMPARE(headerView->sizeHint().width(), 100);
|
||||
}
|
||||
|
||||
void protected_QHeaderView::testVisualRegionForSelection()
|
||||
{
|
||||
QRegion r = visualRegionForSelection(QItemSelection(model()->index(1, 0), model()->index(1, 2)));
|
||||
|
Loading…
Reference in New Issue
Block a user