StupidBeauty
Read times:1767Posted at:Tue Dec 7 12:07:58 2010
- no title specified

Qt4.7.0文档翻译:QFont类参考,QFont Class Reference

QFont类指定一个用于绘制文字的字体

当你创建一个QFont 对象时 ,你指定想要让这个字体拥有的各种属性 Qt会使用拥有指定属性的字体 ,如果不存在符合要求的字体 ,那么 Qt会使用已安装的字体中最接近的 该字体的 实际使用的属性可以从 一个 QFontInfo 对象中获取。如果窗口系统提供一个精确的匹配 ,那么 exactMatch ()返回真。使用 QFontMetrics 来获取测量信息 ,例如 ,使用 QFontMetrics::width ()来获取一个字符串的像素长度

注意 ,在使用一个QFont 之前,必须有一个 QApplication 实例存在。你可 以使用 QApplication::setFont ()来设置程序的默认字体。

如果选中的一个字体不包含需要显示的全部字符 ,那么 QFont会在最接近的等价字体中寻找那些字符 。当一个 QPainter 从一个字体中绘制某个字符时 ,那个 QFont会报告它是否有那个字符;如果它没有 ,那么 QPainter 会绘制一个未填充的方框

这样创建QFont

QFont serifFont("Times", 10, QFont::Bold);

QFont sansFont("Helvetica [Cronyx]", 12);

在构造函数里设置的属性也可以以后再设置 ,例如 setFamily () setPointSize () setPointSizeFloat () setWeight ()和 setItalic () 。在构造完成之后 ,必须设置其余的属性,例如 setBold () setUnderline () setOverline () setStrikeOut ()和 setFixedPitch () QFontInfo 对象应当在那个字体的属性设置 完毕 之后 再创建 QFontInfo 对象不会变化 ,即使你改变那个字体的属性也不变 。对应的"get"函数 ,例如 family () pointSize ()等等 ,返回以前设置的 值,即使使用的 值可能不同也是如此。实际 的值可从一个 QFontInfo 对象中获取。

如果要求的字体族不可用 ,那么你可以使用 setStyleHint ()来选择 一个特定的 QFont::StyleHint QFont::StyleStrategy ,以影响 字体匹配算法 默认的字体族(对应于当前的样式提示)由 defaultFamily ()返回。

字体匹配算法有一个 lastResortFamily ()和 lastResortFont () ,以防在某些情况下找不到合适的匹配字体 。你可以使用 insertSubstitution ()和 insertSubstitutions ()来为字体族名字提供替代品 。替代品可以使用 removeSubstitution ()删除 。使用 substitute ()来获取一个字体族的第一个替代品 ,或者如果它没有替代品的话 ,返回该字体族自身的名字。使用 substitutes ()来获取一个字体族的替代品的列表 (可能会是空的)。

每个QFont 都有一个 key () ,你可以使用 ,例如 ,用作一个缓存或者字典中的 键。如果你想要保存用户对于字体的设置 ,你可以使用 QSettings ,使用 toString ()来写字体信息 ,再使用 fromString ()将它读取。也可以使用 operator<<()和operator>>()函数 ,但是是它们是使用数据流来工作

可以使用 setPixelSize ()来将显示到屏幕上的字符的高度设为指定的像素个数 ;然而使用 setPointSize ()可以达到类似的效果 ,并且还与设备无关。

在X11 里面,你可以调用 setRawName ()以用系统指定名字来设置一个字体

载入字体可能会很耗资源,尤其是在 X11 上。QFont包含了大尺度的优化措施,以让对 QFont 对象的复制变快,并且对它所依赖的缓慢的窗口系统函数的结果进行缓存。

字体匹配算法是这样工作的

  1. 1.查找指定的字体族

  2. 2. 如果没有找到 ,则使用 styleHint ()来选择一个替代字体族。

  3. 3.查找每个替代字体族

  4. 4. 如果所有的替代字体族 都没找到,或者是根本就没有 styleHint (),则查找 “helvetica”。

  5. 5. 如果没找到 “helvetica”, Qt会尝试使用 lastResortFamily ()

  6. 6. 如果没有找到 lastResortFamily () Qt会尝试使用 lastResortFont () ,而这个函数永远会返回某种字体名字。

注意,实际的字体匹配算法在不同平台上是不一样的。

当找到一个字体之后 ,剩下的属性是按照优先级来匹配的:

  1. 1. fixedPitch ()

  2. 2. pointSize () (看下面的说明)

  3. 3. weight ()

  4. 4. style ()

如果你有一个匹配字体族名字的字体,那么,即使其它的任何属性都不匹配,这个字体也会比一个 不匹配字体族名字却匹配其它属性的字体 要优先使用。这是因为,字体族名字是主要的查找标准。

如果字体的点阵大小(point size)与请求的点阵大小相差20%以内,那么它就被定义为匹配的。当有多个字体匹配并且只有点阵大小不同时,与请求的字体的点阵大小最接近的字体将会被选中。

实际用来绘制文字的字体族 、字体大小、粗细以及其它的字体属性将依赖于窗口系统对选定的字体族能提供的东西 QFontInfo 对象可用来确定实际用于绘制文字的属性 值。

示例

QFont f("Helvetica");

如果你同时有 Adobe 的和Cronyx 的Helvetica,那么你可以任选一个。

QFont f("Helvetica [Cronyx]");

你可以在字体族名字里面指定你想要的厂商名字。上面例子中的字体f 会被设置成“Helvetica [Cronyx]”。

要确定 在窗口系统里实际使用的字体的属性,就使用一个 QFontInfo 对象 例如

QFontInfo info(f1);

QString family = info.family();

要确定字体的测量信息就使用一个 QFontMetrics 对象 ,例如:

QFontMetrics fm(f1);

int textWidthInPixels = fm.width("How many pixels wide is this text?");

int textHeightInPixels = fm.height();

要想知道更多关于字体的一般信息 ,就去看 comp.fonts常见问题 。关于编码的信息可在 Roman Czyborra 的网页 上找到

参见 QFontComboBox QFontMetrics QFontInfo QFontDatabase 字符图示例

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands