StyleSheet: respect a font weight set for header sections
QCommonStyle sets the font for a selected header section to bold. This overrides the font weight a calling style might already have set, e.g. when a style sheet is applied to explicitly set a weight for a checked header section: QHeaderView::section:checked { font-size: 20px font-weight: normal } Since setting the weight on a font sets the respective resolve-mask bit, we can avoid overwriting a weight that is already set explicitly. Add baseline test coverage using a QTableWidget. Fixes: QTBUG-122180 Pick-to: 6.5 Change-Id: I8c6279ad2fd8c5718ebea26e27c64ae823625748 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> (cherry picked from commit 74e0ed217fdec8e32227f9f845eccac7f1552297) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
9dd7e09c9b
commit
294a2646db
@ -1679,9 +1679,12 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
|
||||
QFontMetrics fm(header->fontMetrics);
|
||||
if (header->state & QStyle::State_On) {
|
||||
QFont fnt = p->font();
|
||||
fnt.setBold(true);
|
||||
p->setFont(fnt);
|
||||
fm = QFontMetrics((p->font()));
|
||||
// the font already has a weight set; don't override that
|
||||
if (!(fnt.resolveMask() & QFont::WeightResolved)) {
|
||||
fnt.setBold(true);
|
||||
p->setFont(fnt);
|
||||
fm = QFontMetrics((p->font()));
|
||||
}
|
||||
}
|
||||
QString text = header->text;
|
||||
if (const QStyleOptionHeaderV2 *headerV2 = qstyleoption_cast<const QStyleOptionHeaderV2 *>(header)) {
|
||||
|
@ -0,0 +1,16 @@
|
||||
QHeaderView::section {
|
||||
background-color: red;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
QHeaderView::section:checked {
|
||||
background-color: green;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
QHeaderView::section:first {
|
||||
background-color: yellow;
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
}
|
@ -27,6 +27,9 @@ private slots:
|
||||
void tst_QTreeView_data();
|
||||
void tst_QTreeView();
|
||||
|
||||
void tst_QHeaderView_data();
|
||||
void tst_QHeaderView();
|
||||
|
||||
private:
|
||||
QDir styleSheetDir;
|
||||
};
|
||||
@ -205,6 +208,22 @@ void tst_Stylesheet::tst_QTreeView()
|
||||
QBASELINE_CHECK_DEFERRED(takeSnapshot(), "itemSelected");
|
||||
}
|
||||
|
||||
void tst_Stylesheet::tst_QHeaderView_data()
|
||||
{
|
||||
loadTestFiles();
|
||||
}
|
||||
|
||||
void tst_Stylesheet::tst_QHeaderView()
|
||||
{
|
||||
QHBoxLayout *layout = new QHBoxLayout;
|
||||
QTableWidget *tw = new QTableWidget(10, 10);
|
||||
tw->setCurrentCell(1, 1);
|
||||
layout->addWidget(tw);
|
||||
testWindow()->setLayout(layout);
|
||||
makeVisible();
|
||||
QBASELINE_TEST(takeSnapshot());
|
||||
}
|
||||
|
||||
#define main _realmain
|
||||
QTEST_MAIN(tst_Stylesheet)
|
||||
#undef main
|
||||
|
Loading…
x
Reference in New Issue
Block a user