我正在使用font().family()获得QWidget的默认字体系列.我将它与我从QFontDatabase().families()获得的QStringList进行比较.默认字体的系列是"Sans",但我在QFontDatabase列表中找不到,我只能找到Sans Serif,Droid Sans,FreeSans等.为什么QWidget的默认字体甚至不存在于系统的字体上?
这是一次经典的旅行.
逻辑上,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()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2945 次 |
| 最近记录: |