【问题标题】:QFontDatabase doesn't contain all the fonts families or it has different namesQFontDatabase 不包含所有字体系列或名称不同
【发布时间】:2013-10-01 11:38:40
【问题描述】:

我正在使用 font().family() 获取 QWidget 的默认字体系列。我将此与从 QFontDatabase().families() 获得的 QStringList 进行比较。默认字体的系列是“Sans”,但我在从 QFontDatabase 获得的列表中找不到,我只能找到 Sans Serif、Droid Sans、FreeSans 等。为什么 QWidget 的默认字体甚至不存在于系统的字体中?

【问题讨论】:

    标签: c++ qt fonts


    【解决方案1】:

    这是一个经典的绊脚石。

    从逻辑上讲,QFont 是对字体的请求。它可能会满足于与请求不完全匹配的东西。 实际字体可从QFontInfo获得。

    如果您考虑一下,可以将“随便”放在QFont 中。 QFont 应该在什么时候改变自身以指示实际选择的字体?如果您在小部件上设置字体,然后将其读回,它会被更改以匹配那里的字体,这将是相当令人困惑的。所以,QFont 不存在这样的合理点可以变形,所以QFont 只能是一个请求。

    您控制QFont,但系统的字体可用性和其他约束控制匹配的QFontInfo

    不变量可以表示为:

    QFontDatabase db;
    QFont const font = widget->font();
    QStringList const families = db.families();
    Q_ASSERT(families.contains(font.family()) || true);
    QFontInfo const info(font);
    Q_ASSERT(families.contains(info.family()));
    

    【讨论】:

      【解决方案2】:

      Sans 是家庭别名。

      Droid Sans 是字体系列名称。

      QFont("Sans") 根据您的请求(.boldness, size, lang, script, features 等)返回具有家族“Sans”和最接近参数的字体

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 2013-11-23
        • 2012-10-14
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        相关资源
        最近更新 更多