QFont
QFont
Header: #include <QFont>
Public Types
enum | Capitalization { MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize } |
enum | HintingPreference { PreferDefaultHinting, PreferNoHinting, PreferVerticalHinting, PreferFullHinting } |
enum | SpacingType { PercentageSpacing, AbsoluteSpacing } |
enum | Stretch { AnyStretch, UltraCondensed, ExtraCondensed, Condensed, ..., UltraExpanded } |
enum | Style { StyleNormal, StyleItalic, StyleOblique } |
enum | StyleHint { AnyStyle, SansSerif, Helvetica, Serif, ..., System } |
enum | StyleStrategy { PreferDefault, PreferBitmap, PreferDevice, PreferOutline, ..., ForceIntegerMetrics } |
enum | Weight { Thin, ExtraLight, Light, Normal, ..., Black } |
Public Functions
QFont() | |
QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false) | |
QFont(const QFont &font, QPaintDevice *pd) | |
QFont(const QFont &font) | |
~QFont() | |
bool | bold() const |
QFont::Capitalization | capitalization() const |
QString | defaultFamily() const |
bool | exactMatch() const |
QString | family() const |
bool | fixedPitch() const |
bool | fromString(const QString &descrip) |
QFont::HintingPreference | hintingPreference() const |
bool | isCopyOf(const QFont &f) const |
bool | italic() const |
bool | kerning() const |
QString | key() const |
QString | lastResortFamily() const |
QString | lastResortFont() const |
qreal | letterSpacing() const |
QFont::SpacingType | letterSpacingType() const |
bool | overline() const |
int | pixelSize() const |
int | pointSize() const |
qreal | pointSizeF() const |
QFont | resolve(const QFont &other) const |
void | setBold(bool enable) |
void | setCapitalization(QFont::Capitalization caps) |
void | setFamily(const QString &family) |
void | setFixedPitch(bool enable) |
void | setHintingPreference(QFont::HintingPreference hintingPreference) |
void | setItalic(bool enable) |
void | setKerning(bool enable) |
void | setLetterSpacing(QFont::SpacingType type, qreal spacing) |
void | setOverline(bool enable) |
void | setPixelSize(int pixelSize) |
void | setPointSize(int pointSize) |
void | setPointSizeF(qreal pointSize) |
void | setStretch(int factor) |
void | setStrikeOut(bool enable) |
void | setStyle(QFont::Style style) |
void | setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = PreferDefault) |
void | setStyleName(const QString &styleName) |
void | setStyleStrategy(QFont::StyleStrategy s) |
void | setUnderline(bool enable) |
void | setWeight(int weight) |
void | setWordSpacing(qreal spacing) |
int | stretch() const |
bool | strikeOut() const |
QFont::Style | style() const |
QFont::StyleHint | styleHint() const |
QString | styleName() const |
QFont::StyleStrategy | styleStrategy() const |
void | swap(QFont &other) |
QString | toString() const |
bool | underline() const |
int | weight() const |
qreal | wordSpacing() const |
QVariant | operator QVariant() const |
bool | operator!=(const QFont &f) const |
bool | operator<(const QFont &f) const |
QFont & | operator=(const QFont &font) |
QFont & | operator=(QFont &&other) |
bool | operator==(const QFont &f) const |
Static Public Members
void | insertSubstitution(const QString &familyName, const QString &substituteName) |
void | insertSubstitutions(const QString &familyName, const QStringList &substituteNames) |
void | removeSubstitutions(const QString &familyName) |
QString | substitute(const QString &familyName) |
QStringList | substitutes(const QString &familyName) |
QStringList | substitutions() |
Related Non-Members
uint | qHash(const QFont &font, uint seed = 0) |
QDataStream & | operator<<(QDataStream &s, const QFont &font) |
QDataStream & | operator>>(QDataStream &s, QFont &font) |
Detailed Description
QFont类指定用于绘制文本的字体。
当您创建QFont对象时,您可以指定希望字体具有的各种属性。Qt将使用具有指定属性的字体,或者如果不存在匹配的字体,Qt将采用最匹配的已安装字体。实际使用的字体属性可从QFontInfo对象中检索。如果窗口系统提供精确匹配,exactMatch()返回true。使用QFontMetrics获取测量值,例如,使用QFontMetrics::width()获取字符串的像素长度。
请注意,在使用QFont之前,QGuiApplication实例必须存在。您可以使用QGuiApplication::setFont()设置应用程序的默认字体。
如果所选字体不包含需要显示的所有字符,QFont将尝试查找最接近的等效字体中的字符。当QPainter从字体中绘制字符时,QFont将报告它是否具有该字符;否则,QPainter将绘制一个未填充的正方形。
使用案例:
QFont serifFont("Times", 10, QFont::Bold); QFont sansFont("Helvetica [Cronyx]", 12);
构造函数中设置的属性也可以稍后设置,例如setFamily()、setPointSize()、setPointSizeF()、set Weight()和setItalic()。其余属性必须在指令后设置,例如setBold()、setUnderline()、setOverline(),setStrikeOut()和setFixedPitch()。QFontInfo对象应在设置字体属性后创建。QFontInfo对象不会更改,即使您更改了字体的属性。相应的“get”函数,例如family()、pointSize()等,返回设置的值,即使使用的值可能不同。实际值可从QFontInfo对象获得。
如果请求的字体系列不可用,您可以通过使用setStyleHint()选择特定的QFont::StyleHin和QFont::StyleStrategy来影响字体匹配算法。默认族(对应于当前样式提示)由defaultFamily()返回。
在找不到合适匹配的情况下,字体匹配算法具有lastResortFamily()和lastResortFont()。您可以使用insertSubstitution()和insertSubsubstitutions()为字体系列名称提供替换。可以使用removeSubstitutions()删除替换。使用substitute()检索族的第一个替代项,如果没有替代项,则检索族名称本身。使用substitutes()检索族的替代品列表(可能为空)。
每个QFont都有一个key(),例如,可以将其用作缓存或字典中的键。如果要存储用户的字体偏好,可以使用QSettings,使用toString()编写字体信息,然后使用fromString()读取。运算符<<()和运算符>>()函数也可用,但它们在数据流上工作。
可以使用setPixelSize()将屏幕上显示的字符高度设置为指定的像素数;然而,使用setPointSize()也有类似的效果,并且提供了设备独立性。
加载字体可能很昂贵,特别是在X11上。QFont包含大量优化,以使QFont对象的复制快速,并缓存其依赖的慢窗口系统函数的结果。
字体匹配算法的工作原理如下:
将搜索指定的字体系列。
如果未找到,则使用styleHint()选择替换族。
搜索每个替换字体系列。
如果找不到这些,或者没有styleHint(),将搜索“helvetica”。
如果找不到“helvetica”,Qt将尝试使用lastResortFamily()。
如果找不到lastResortFamily(),Qt将尝试lastResortFont(),它将始终返回某种名称。
注意,实际的字体匹配算法因平台而异。
在Windows中,对“Courier”字体的请求会自动更改为“Courier New”,这是Courier的改进版本,允许平滑缩放。通过设置PreferBitmap样式策略,可以选择较旧的“Courier”位图字体(请参见setStyleStrategy())。
找到字体后,将按优先级顺序匹配其余属性:
- fixedPitch()
- pointSize() (see below)
- weight()
- style()
如果您的字体与系列匹配,即使其他属性都不匹配,也会优先选择与系列不匹配但与其他属性匹配的字体。这是因为字体系列是主要的搜索标准。
如果点大小在请求点大小的20%以内,则定义为匹配。当多个字体匹配并且仅通过点大小区分时,将选择与所请求的字体具有最接近点大小的字体。
用于绘制文本的实际系列、字体大小、粗细和其他字体属性将取决于窗口系统下所选系列的可用属性。QFontInfo对象可用于确定用于绘制文本的实际值。
QFont f("Helvetica");
###############################