首页 > 解决方案 > 将 QFont styleName 转换为样式表

问题描述

每个人。请帮我。

想象一下,我有一个小部件表单并在其上显示值,并且我希望值的标签以其他字体而不是其他文本标签显示。所以我给他们一个css类名,例如“Value”,并想通过样式表设置一些字体(QLabel.Value {...})。我尝试通过Qt Designers样式表对话框设置QLabel的字体,但如果我选择例如字体为 Medium 的字体Lato Designer会将转换为字符串:

font: 57 12pt "Lato";

并且标签显示非常细的字体,绝对不是Medium样式。

如果我尝试使用另一种字体Gotham样式Book设计师根本看不到样式名称并输出:

  font: 12pt "Gotham".

所以问题是:

  1. 样式表是否支持字体样式名称?
  2. 如果不是,我可以通过哪种 qt 方式将所需的字体分配给相同类型的所有标签(或小部件)?

PS 我使用的是 Windows 10,Qt 15.2 MinGW。

标签: c++qtuser-interface

解决方案


避免使用样式表在小部件上设置自定义字体:

  1. 它们很容易出错。
  2. Qt 没有任何验证器。

您可以轻松地使用QFontQLabel::setFont(或用于显示信息的任何小部件)。例如:

auto font_1()
{
        QFont f;
        f.setFamily("Monospace");
        f.setWeight(10);
        f.setBold(true);
        return f;
}

void change_fonts(std::vector<QLabel*> const& lbns)
{
        for (auto const& lbn : lbns) {
                lbn->setFont(font_1());
        }
}

int main(int argc, char* argv[])
{
        QApplication app(argc, argv);
        auto const win = new QDialog;
        auto const lbn1 = new QLabel("Ghasem Ramezani");
        auto const lbn2 = new QLabel("Ghasem Ramezani");
        auto const lay = new QVBoxLayout;
        change_fonts({lbn1, lbn2});
        lay->addWidget(lbn1);
        lay->addWidget(lbn2);
        win->setLayout(lay);
        win->show();
        return app.exec();
}

您可以更改标签字体:
在此处输入图像描述


推荐阅读