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()

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())。

 

找到字体后,将按优先级顺序匹配其余属性:

  1. fixedPitch()
  2. pointSize() (see below)
  3. weight()
  4. style()

如果您的字体与系列匹配,即使其他属性都不匹配,也会优先选择与系列不匹配但与其他属性匹配的字体。这是因为字体系列是主要的搜索标准。

如果点大小在请求点大小的20%以内,则定义为匹配。当多个字体匹配并且仅通过点大小区分时,将选择与所请求的字体具有最接近点大小的字体。

用于绘制文本的实际系列、字体大小、粗细和其他字体属性将取决于窗口系统下所选系列的可用属性。QFontInfo对象可用于确定用于绘制文本的实际值。

 

  QFont f("Helvetica");

 

 

###############################

posted @ 2023-01-03 08:44  西北逍遥  阅读(236)  评论(0编辑  收藏  举报