如何仅更改QGroupBox标题的字体?

时间:2014-03-06 14:28:07

标签: qt

我想将QGroupBox的标题更改为粗体,其他标题保持不变。如何仅更改QGroupBox标题的字体?

4 个答案:

答案 0 :(得分:13)

如果未明确设置,

Font properties将从父级继承到子级。您可以通过其QGroupBox方法更改setFont()的字体,但是您需要通过显式重置其子项上的字体来中断继承。如果您不想单独为每个孩子设置此项(例如,在每个QRadioButton上),则可以添加一个中间窗口小部件,例如:

之类的东西
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);

另请注意,在为窗口小部件指定新字体时,“此字体的属性将与窗口小部件的默认字体组合以形成窗口小部件的最终字体”。


更简单的方法是使用样式表 - 与CSS不同,与普通的字体和颜色继承不同,properties from style sheets are not inherited

groupBox->setStyleSheet("QGroupBox { font-weight: bold; } ");

答案 1 :(得分:0)

上面的答案是正确的。 以下是一些可能有用的额外细节:

1)我在

学习

Set QGroupBox title font size with style sheets

QGroupBox::title不支持字体属性,因此您无法设置标题字体。您需要按上述方式执行此操作。

2)我发现setStyleSheet()方法比使用QFont更加“精简”。也就是说,您还可以执行以下操作:

groupBox->setStyleSheet("font-weight: bold;");
widget->setStyleSheet("font-weight: normal;");

答案 2 :(得分:0)

至少在Qt 4.8中,使用样式表将字体设置为“粗体”对我不起作用。

一个稍微简单的版本,用于将所有子窗口小部件设置为普通字体,当您使用Qt设计器(ui文件)时也可以使用:

QFont fntBold = font();
fntBold.setBold( true );

ui->m_pGroup1->setFont( fntBold );

auto lstWidgets = ui->m_pGroup1->findChildren< QWidget* >();

for( QWidget* pWidget : lstWidgets )
    pWidget->setFont( font() );

答案 3 :(得分:0)

我是从PyQt5而不是直接从Qt搜索这个问题的,所以这是我在python中的回答,希望它能帮助和我一样情况的其他人。

# Set the QGroupBox's font to bold. Unfortunately it transfers to children widgets.
font = group_box.font()
font.setBold(True)
group_box.setFont(font)  

# Restore the font of each children to regular.
font.setBold(False)
for child in group_box.children():
    child.setFont(font)