QFontDatabase 不包含所有字体系列或者它具有不同的名称

2024-02-02

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


这是一次经典的旅行。

从逻辑上讲,QFont is a request对于字体。它可能会满足于与所要求的不太相符的东西。这实际字体可以从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()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QFontDatabase 不包含所有字体系列或者它具有不同的名称 的相关文章

随机推荐