QFontDatabase 不包含所有字体系列,或者它有不同的名称
QFontDatabase doesn't contain all the fonts families or it has different names
我正在使用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()));
Sans
是一个家族别名。
Droid Sans
是字体系列名称。
QFont("Sans") 返回一个字体,其中包含家族 "Sans" 和最接近请求的参数(.boldness、size、lang、script、features等)
相关文章:
- 我应该如何为包含动态数组的类编写所需的构造函数
- 标头包含不是 .c 程序所必需的,而是.cpp程序需要的
- 如何在cython中包含C++所需的路径
- 当我无法包含代码所需的头文件时,如何链接 shrared 库?
- C++ ATIOGLXX.pdb 包含查找模块 ATIOGLXX.dll 源代码所需的调试信息
- 对象如何访问所包含的类的属性
- 如何初始化字符串以包含C 中所需数量的数字数量
- 创建C .lib项目,消费者项目必须引用LIBS所包含的
- 打印与BST的直径相对应的节点所包含的路径
- 调用包含所有所需代码的函数或内部包含所需代码的其他函数的函数更好?
- C++标准库容器相对于所包含对象的线程安全性
- set.clear() 在删除元素之前调用所包含元素的析构函数
- #包含stdio混淆是每个头文件所需要的
- 使一个标头成为多个类包含所必需的
- 用于管理容器的模板类,获取所包含数据类型
- QFontDatabase 不包含所有字体系列,或者它有不同的名称
- 另一个对象所包含的一个对象如何可以更改容器对象的私有数据成员
- 创建自己所需的函数比为某个函数包含整个库更可取吗
- c++元编程—创建包含模板化方法的所有变体的元组
- 创建一个类,其静态成员容器包含所述类的所有实例