Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the font of a QGroupBox's title only?

Tags:

qt

I want to change the QGroupBox's title to be bold and others keep unchanged. How to change the font of a QGroupBox's title only?

like image 904
user1899020 Avatar asked Mar 06 '14 14:03

user1899020


2 Answers

Font properties are inherited from parent to child, if not explicitly set. You can change the font of the QGroupBox through its setFont() method, but you then need to break the inheritance by explicitly resetting the font on its children. If you do not want to set this on each individual child (e.g. on each QRadioButton) separately, you can add an intermediate widget, e.g. something like

QGroupBox *groupBox = new QGroupBox("Bold title", parent);

// set new title font
QFont font;
font.setBold(true);
groupBox->setFont(font);

// intermediate widget to break font inheritance
QVBoxLayout* verticalLayout = new QVBoxLayout(groupBox);
QWidget* widget = new QWidget(groupBox);
QFont oldFont;
oldFont.setBold(false);
widget->setFont(oldFont);

// add the child components to the intermediate widget, using the original font
QVBoxLayout* verticalLayout_2 = new QVBoxLayout(widget);

QRadioButton *radioButton = new QRadioButton("Radio 1", widget);
verticalLayout_2->addWidget(radioButton);

QRadioButton *radioButton_2 = new QRadioButton("Radio 2", widget);
verticalLayout_2->addWidget(radioButton_2);

verticalLayout->addWidget(widget);

Note also, when assigning a new font to a widget, "the properties from this font are combined with the widget's default font to form the widget's final font".


An even easier approach is to use style sheets - unlike with CSS, and unlike the normal font and color inheritance, properties from style sheets are not inherited:

groupBox->setStyleSheet("QGroupBox { font-weight: bold; } ");
like image 161
Andreas Fester Avatar answered Sep 28 '22 13:09

Andreas Fester


The answer above is correct. Here are a couple extra details which may be helpful:

1) I learned in

Set QGroupBox title font size with style sheets

that the QGroupBox::title doesn't support font properties, so you CAN'T set the title font that way. You need to do it as above.

2) I find the setStyleSheet() method to be a bit more "streamlined" than using QFont. That is, you can also do the following:

groupBox->setStyleSheet("font-weight: bold;");
widget->setStyleSheet("font-weight: normal;");
like image 43
dunedin15 Avatar answered Sep 28 '22 12:09

dunedin15