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