Qt 字型(04):QFont類【官翻】
QFont 類
QFont類指定了用於繪製文字的字型的查詢。
Header: | #include < QFont > |
---|---|
qmake: | QT += gui |
詳述
QFont可以看作是對系統上一種或多種字型的查詢。
當你建立一個QFont物件時,你需要指定各種你想要字型擁有的屬性。Qt將使用帶有指定屬性的字型,如果不存在匹配字型,Qt將使用最接近已安裝字型的字型。實際使用的字型屬性可以從QFontInfo物件中檢索。如果視窗系統提供了精確匹配,則exactMatch()返回true。使用QFontMetricsF獲取度量值,例如使用QFontMetrics::width()獲取字串的畫素長度。
沒有特別設定的屬性將不會影響字型選擇演算法,這些屬性會使用預設值。
要載入特定的物理字型(通常由單個檔案表示),請使用QRawFont。
注意,在使用QFont前,QGuiApplication例項必須存在。可以用QGuiApplication::setFont()設定應用程式的預設字型。
如果選擇的字型不包含需要顯示的所有字元,QFont將嘗試在最接近的等效字型中查詢字元。當一個QPainter從一個字型中繪製一個字元時,QFont將報告它是否具有該字元;如果沒有,QPainter將繪製一個未填充的正方形。
像這樣建立QFonts:
QFont serifFont("Times", 10, QFont::Bold);
QFont sansFont("Helvetica [Cronyx]", 12);
在建構函式中設定的屬性也可以在以後設定,例如setFamily(), setPointSize(), setPointSizeF(), setWeight()和setItalic()。其餘的屬性必須在contstruction之後設定,例如setBold(), setUnderline(), setOverline(), setStrikeOut()和setFixedPitch()。QFontInfo物件應該在字型的屬性設定之後建立。即使你改變了字型的屬性,QFontInfo物件也不會改變。相應的“get”函式,例如family(), pointSize()等,返回設定的值,即使使用的值可能不同。實際的值可以從QFontInfo物件中獲得。
如果所請求的字型族不可用,你可以通過setStyleHint()選擇一個特定的QFont::StyleHint和QFont::StyleStrategy來影響字型匹配演算法。defaultFamily()返回預設族(與當前樣式提示相對應)。
可以使用insertSubstitution()和insertSubstitutions()為字型家族名稱提供替換。替換可以用removeSubstitutions()來刪除。使用substitute()檢索家庭的第一個替代品,如果沒有替代品,則檢索家庭名本身。使用substitution()來檢索一個家庭的替代品列表(可能是空的)。替換一種字型之後,必須通過銷燬並重新建立所有QFont物件來觸發字型的更新。
每個QFont都有一個key(),您可以使用它,例如,作為快取或字典中的鍵。如果你想儲存一個使用者的字型偏好,你可以使用QSettings,用toString()寫字型資訊,然後用fromString()讀回來。operator<<()和operator>>()函式也可用,但它們用於資料流。
可以用setPixelSize()將螢幕上顯示的字元高度設定為指定的畫素數;然而,使用setPointSize()有類似的效果,並提供裝置獨立性。
加載字型可能非常昂貴,特別是在X11上。QFont包含大量優化,使QFont物件的複製速度更快,並快取它所依賴的慢速視窗系統函式的結果。
字型匹配演算法的工作原理如下:
- 搜尋指定的字型族(由setFamilies()設定)。
- 如果沒有找到,那麼如果設定了指定的字型族存在並且可以用來表示正在使用的書寫系統,那麼它將被選中。
- 如果不是,則選擇支援書寫系統的替代字型。字型匹配演算法將嘗試為QFont中設定的所有屬性找到最佳匹配。實現這一點的方法因平臺而異。
- 如果系統中不存在支援文字的字型,那麼特殊的“缺失字元”框將顯示在它的位置上。
注意:如果所選字型雖然支援一般的書寫系統,但缺少一個或多個特定字元的字形,那麼Qt將嘗試為該字元或這些特定字元找到備用字型。這個特性可以使用QFont:: nofontmerge樣式策略禁用。
在Windows中,對“Courier”字型的請求會自動更改為“Courier New”,這是Courier的改進版本,允許平滑縮放。舊的“Courier”點陣圖字型可以通過設定PreferBitmap樣式策略來選擇(參見setStyleStrategy())。
一旦找到字型,其餘的屬性將按照優先順序進行匹配:
- fixedPitch ()
- pointSize()(見下文)
- weight()
- style()
如果你有一個與family匹配的字型,即使其他屬性都不匹配,這個字型將優先選擇不與family匹配但與其他屬性匹配的字型。這是因為字型家族是主要的搜尋條件。
如果點大小在請求的點大小的20%以內,則定義點大小匹配。當多個字型匹配且僅以點大小區分時,將選擇與請求的字型點大小最接近的字型。
用於繪製文字的實際字型族、字型大小、粗細和其他字型屬性將取決於在視窗系統下所選的字型族可用的內容。QFontInfo物件可用於確定繪製文字所使用的實際值。
Examples:
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.horizontalAdvance("How many pixels wide is this text?");
int textHeightInPixels = fm.height();
有關字型的更多一般資訊,請參見compat .fonts FAQ。關於編碼的資訊可以從Roman Czyborra’s上找到。
公共型別
-
enum Capitalization
此字型適用於的文字呈現選項。常量 值 簡介 MixedCase 0 這是普通的文字呈現選項,沒有應用大小寫更改。 AllUppercase 1 這將修改文字,使其呈現為全大寫型別。 AllLowercase 2 這將修改文字,使其呈現為全小寫型別。 SmallCaps 3 這將改變以小寫字母呈現的文字。 Capitalize 4 這將修改文字,使其呈現為每個單詞的第一個字元作為大寫字元。 -
enum HintingPreference
此列舉描述了可應用於符號的不同級別的暗示,以提高顯示器上的易讀性,這可能是由畫素密度保證的。常量 值 簡介 PreferDefaultHinting 0 使用目標平臺的預設提示級別。 PreferNoHinting 1 如果可能,呈現文字時不要暗示字形的輪廓。文字佈局將在印刷上準確和可擴充套件,使用相同的標準,如列印時使用。 PreferVerticalHinting 2 如果可能的話,不要呈現水平暗示的文字,而是將字形垂直地對齊到畫素網格上。在顯示器上,當密度過低而不能準確顯示符號時,文字將會顯示得更清晰。但是由於字形的水平度量是沒有暗示的,因此文字的佈局將可擴充套件到密度更高的裝置(如印表機),而不會影響換行等細節。 PreferFullHinting 3 如果可能的話,在水平和垂直方向上呈現文字暗示。文字將更名為優化目標裝置上的易讀性,但由於指標將取決於目標文字的大小,符號的位置,換行符,和其他印刷細節不會規模,這意味著一個文字佈局看起來不同的裝置和不同的畫素密度。 請注意,enum只描述了一個首選項,因為所有Qt支援的平臺都不支援完整範圍的提示級別。下表詳細說明了給定提示偏好對選定的目標平臺集的影響。
— PreferDefaultHinting PreferNoHinting PreferVerticalHinting Windows Vista (w/o Platform Update) and earlier Full hinting Full hinting Full hinting Windows 7 and Windows Vista (w/Platform Update) and DirectWrite enabled in Qt Full hinting Vertical hinting Vertical hinting FreeType Operating System setting No hinting Vertical hinting (light) Cocoa on macOS No hinting No hinting No hinting 注意:請注意,可以通過DirectWrite字型引擎更改Windows上的提示首選項。這在安裝平臺更新後的Windows Vista和Windows 7上可用。為了使用這個擴充套件,配置Qt使用-directwrite。然後,目標應用程式將取決於DirectWrite在目標系統上的可用性。
-
enum SpacingType
常量 值 簡介 PercentageSpacing 0 值100將保持間距不變;200的值將通過字元本身的寬度來擴大字元後面的間距。 AbsoluteSpacing 1 正值會增加相應畫素的字母間距;負值會減小間距。 -
enum Stretch
遵循CSS命名約定的預定義拉伸值。值越高,文字就越拉伸。常量 值 簡介 AnyStretch 0 0接受使用其他QFont屬性匹配的拉伸(新增在Qt 5.8中) UltraCondensed 50 50 ExtraCondensed 62 62 Condensed 75 75 SemiCondensed 87 87 Unstretched 100 100 SemiExpanded 112 112 Expanded 125 125 ExtraExpanded 150 150 UltraExpanded 200 200 See also setStretch() and stretch().
-
enum Style
該列舉描述了用於顯示文字的不同字形樣式。常量 值 簡介 StyleNormal 0 無樣式文字中使用的普通字形。 StyleItalic 1 專為表示斜體文字而設計的斜體字形。 StyleOblique 2 具有斜體外觀的字形通常基於未樣式化的字形,但出於表示斜體文字的目的而未進行微調。 -
enum StyleHint
如果選定的字型系列不可用,字型匹配演算法將使用樣式提示來查詢適當的預設系列。常量 值 簡介 Helvetica 0 是SansSerif的同義詞。 Times 1 是Serif的同義詞。 Courier 2 TypeWriter的同義詞。 OldEnglish 3 字型匹配器更喜歡裝飾字型。 System 4 字型匹配器更喜歡系統字型。 AnyStyle 5 離開字型匹配演算法來選擇系列。 這是預設值。 Cursive 6 字型匹配器更喜歡對映到CSS通用字型系列“草書”的字型。 Monospace 7 字型匹配器更喜歡對映到CSS通用字型系列“等寬字型”的字型。 Fantasy 8 字型匹配器更喜歡對映到CSS通用字型系列“ fantasy”的字型。 TypeWriter Courier 字型匹配器更喜歡固定間距字型。 SansSerif Helvetica 字型匹配器首選無襯線字型。 Decorative OldEnglish 是OldEnglish的同義詞。 Serif Times 字型匹配器更喜歡襯線字型。 -
enum StyleStrategy
樣式策略告訴字型匹配演算法應使用什麼型別的字型來找到適當的預設系列。
可以使用以下策略:常量 值 簡介 PreferDefault 0x0001 預設樣式策略。它不喜歡任何型別的字型。 PreferBitmap 0x0002 首選點陣圖字型(與輪廓字型相對)。 PreferDevice 0x0004 喜歡裝置字型。 PreferOutline 0x0008 偏愛輪廓字型(與點陣圖字型相對)。 ForceOutline 0x0010 強制使用輪廓字型。 NoAntialias 0x0100 不要對字型進行鋸齒處理。 NoSubpixelAntialias 0x0800 如果可能,避免對字型使用亞畫素抗鋸齒。 PreferAntialias 0x0080 儘可能使用抗鋸齒。 OpenGLCompatible 0x0200 不建議使用此樣式策略。預設情況下,所有字型均相容OpenGL。 NoFontMerging 0x8000 如果為某個書寫系統選擇的字型不包含要求繪製的字元,則Qt會自動選擇一個包含該字元的外觀相似的字型。 NoFontMerging標誌禁用此功能。請注意,啟用該標誌不會阻止Qt在所選字型不支援文字書寫系統時自動選擇合適的字型。 PreferNoShaping 0x1000 有時,字型會將複雜的規則應用於一組字元,以便正確顯示它們。在某些書寫系統中,例如Brahmic指令碼,為了使文字清晰易讀,這是必需的。拉丁文字,它只是一個裝飾性的功能。 PreferNoShaping標誌將在不需要所有這些功能時將其禁用,這將在大多數情況下提高效能(自Qt 5.10起)。 這些中的任何一個都可以與以下標誌之一進行或運算:
常量 值 簡介 PreferMatch 0x0020 喜歡完全匹配。 字型匹配器將嘗試使用已指定的確切字型大小。 PreferQuality 0x0040 首選質量最好的字型。 字型匹配器將使用字型支援的最接近的標準磅值。 ForceIntegerMetrics 0x0400 不建議使用此樣式策略。 使用QFontMetrics檢索舍入的字型指標。 -
enum Weight
Qt使用從0到99的加權比例,與Windows或CSS中使用的比例相似但不相同。 權重0將變薄,而權重99將是黑色。
該列舉包含預定義的字型權重:常量 值 簡介 Thin 0 0 ExtraLight 12 12 Light 25 25 Normal 50 50 Medium 57 57 DemiBold 63 63 Bold 75 75 ExtraBold 81 81 Black 87 87
公共函式
- QFont(const QFont &font)
- QFont(const QFont &font, const QPaintDevice *pd)
- QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false)
- QFont()
建構函式 - QFont & operator=(QFont &&other)
- QFont & operator=(const QFont &font)
賦值 - void swap(QFont &other)
交換QFont - QFont resolve(const QFont &other) const
返回一個新的QFont,該QFont具有從其他屬性複製的,以前未在此字型上設定的屬性。 - QString key() const
返回字型的鍵,即字型的文字表示形式。 它通常用作字型的快取或字典的鍵。 - ~QFont()
析構 - bool exactMatch() const
如果有與該字型設定完全匹配的視窗系統字型可用,則返回true。 - bool isCopyOf(const QFont &f) const
- bool operator==(const QFont &f) const
判斷和 f 是否相等 - bool fromString(const QString &descrip)
- QString toString() const
設定此字型以匹配描述說明。 描述是字型屬性的逗號分隔列表,由toString() 返回。 - bool bold() const
- void setBold(bool enable)
粗體 - bool italic() const
- void setItalic(bool enable)
斜體 - int weight() const
- void setWeight(int weight)
字型權重 - QFont::Capitalization capitalization() const
- void setCapitalization(QFont::Capitalization caps)
大寫型別 - QStringList families() const
- void setFamilies(const QStringList &families)
返回所請求的字型系列名稱列表,即在上一次setFamilies() 呼叫中或通過建構函式設定的名稱。 否則,它將返回一個空列表。 - QString family() const
- void setFamily(const QString &family)
字型系列名稱 - bool fixedPitch() const
- void setFixedPitch(bool enable)
固定間距,參閱 QFontInfo. - QFont::HintingPreference hintingPreference() const
- void setHintingPreference(QFont::HintingPreference hintingPreference)
字形渲染的提示 - bool kerning() const
- void setKerning(bool enable)
字型的字距設定。預設情況下,字距設定是啟用的。
當字距設定被啟用時,字形度量不再加起來,即使對於拉丁文字也是如此。換句話說,寬度(‘a’)+寬度(‘b’)等於寬度(‘ab’)的假設不一定是正確的。 - qreal letterSpacing() const
- QFont::SpacingType letterSpacingType() const
- void setLetterSpacing(QFont::SpacingType type, qreal spacing)
字母間距 - qreal wordSpacing() const
- void setWordSpacing(qreal spacing)
詞間距 - bool overline() const
- void setOverline(bool enable)
上劃線 - bool underline() const
- void setUnderline(bool enable)
下劃線 - bool strikeOut() const
- void setStrikeOut(bool enable)
刪除線 - int pixelSize() const
- void setPixelSize(int pixelSize)
- int pointSize() const
- void setPointSize(int pointSize)
- qreal pointSizeF() const
- void setPointSizeF(qreal pointSize)
字型大小 - int stretch() const
- void setStretch(int factor)
拉伸係數 - QString defaultFamily() const
當前樣式提示對應的系列名稱 - QFont::Style style() const
- void setStyle(QFont::Style style)
字型樣式 - QString styleName() const
- void setStyleName(const QString &styleName)
樣式名稱 - QFont::StyleStrategy styleStrategy() const
- void setStyleStrategy(QFont::StyleStrategy s)
樣式策略 - QFont::StyleHint styleHint() const
- void setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = PreferDefault)
樣式提示和策略 - QVariant operator QVariant() const
- bool operator!=(const QFont &f) const
- bool operator<(const QFont &f) const
靜態方法
- 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)
相關文章
- Qt 設定全域性字型QT
- 04_String類
- influxdb官網文件翻譯UX
- QT視窗類QT
- QT TS檔案翻譯,部分不能正確被翻譯QT
- Qt容器類QList、QLinkedList和QVector類QT
- Gremlin-官網介紹翻譯REM
- Hadoop官網翻譯之HDFS ArchitectureHadoop
- Elasticsearch官檔翻譯——2.6 升級Elasticsearch
- QT的QImage類的使用QT
- QT的QProgressDialog類的使用QT
- QT的QAxBase類的使用QT
- QT的QWGLNativeContext類的使用QTContext
- _04_java核心類庫2Java
- Hadoop官網翻譯之HDFS Users GuideHadoopGUIIDE
- Gradle入門(翻譯自Graddle官網)Gradle
- Java以太坊開發官網推薦類庫web3j的全站中文翻譯JavaWeb
- iPhone8官翻機和翻新機有什麼區別?怎麼辨別蘋果iPhone官翻機?iPhone蘋果
- spring官網線上學習文件翻譯Spring
- hadoop官網翻譯第一天Hadoop
- Qt 報錯 “類名”does not name a typeQT
- 翻譯:《實用的Python程式設計》02_04_SequencesPython程式設計
- 翻譯:《實用的Python程式設計》04_02_InheritancePython程式設計
- 翻譯:《實用的Python程式設計》04_00_OverviewPython程式設計View
- 翻譯:《實用的Python程式設計》04_01_ClassPython程式設計
- 翻譯:《實用的Python程式設計》03_04_ModulesPython程式設計
- 2021-01-04 | 151. 翻轉字串裡的單詞字串
- 翻譯:《實用的Python程式設計》01_04_StringsPython程式設計
- ARP協議:網路世界的地址翻譯官協議
- [翻譯] .NET 官宣跨平臺 UI 框架 MAUIUI框架
- 【Qt6】QWindow類可以做什麼QT
- 翻譯:《實用的Python程式設計》04_03_Special_methodsPython程式設計
- Easy Translator語言翻譯類工具R語言
- WPF 被 靈格斯翻譯官 取詞帶崩
- hadoop官網翻譯第三天Hadoop Cluster SetupHadoop
- Qt Creator 原始碼學習筆記04,多外掛實現原理分析QT原始碼筆記
- 04聚類演算法-程式碼案例一-K-means聚類聚類演算法
- 當官遊戲品類詳解遊戲