3

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

4

2 回答 2

5

这是一次经典的翻车。

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

如果你考虑一下,你可以把“whatever”放在一个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()));
于 2013-09-25T20:22:21.637 回答
0

Sans是家庭别名。

Droid Sans是字体系列名称。

QFont("Sans") 为您的请求返回具有家族“Sans”和最接近参数的字体(.boldness、大小、语言、脚本、功能等)

于 2013-09-25T21:46:41.057 回答