QT获取QFont所支持的family列表

本文介绍如何在Qt应用程序中利用QFontDatabase类来获取系统中可用的字体家族列表,通过示例代码展示了如何初始化QFontDatabase并调用其families()方法来获取字体名称。
		#include <QFontDatabase>
		...
		QFontDatabase fd;
		QStringList lis = fd.families();
		...
"Agency FB"
"Algerian"
"Arial"
"Arial Black"
"Arial Narrow"
"Arial Rounded MT Bold"
"Bahnschrift"
"Bahnschrift Condensed"
"Bahnschrift Light"
"Bahnschrift Light Condensed"
"Bahnschrift Light SemiCondensed"
"Bahnschrift SemiBold"
"Bahnschrift SemiBold Condensed"
"Bahnschrift SemiBold SemiConden"
"Bahnschrift SemiCondensed"
"Bahnschrift SemiLight"
"Bahnschrift SemiLight Condensed"
"Bahnschrift SemiLight SemiConde"
"Baskerville Old Face"
"Bauhaus 93"
"Bell MT"
"Berlin Sans FB"
"Berlin Sans FB Demi"
"Bernard MT Condensed"
"Blackadder ITC"
"Bodoni MT"
"Bodoni MT Black"
"Bodoni MT Condensed"
"Bodoni MT Poster Compressed"
"Book Antiqua"
"Bookman Old Style"
"Bookshelf Symbol 7"
"Bradley Hand ITC"
"Britannic Bold"
"Broadway"
"Brush Script MT"
"Buxton Sketch"
"Calibri"
"Calibri Light"
"Californian FB"
"Calisto MT"
"Cambria"
"Cambria Math"
"Candara"
"Candara Light"
"Cascadia Code"
"Cascadia Code ExtraLight"
"Cascadia Code Light"
"Cascadia Code SemiBold"
"Cascadia Code SemiLight"
"Cascadia Mono"
"Cascadia Mono ExtraLight"
"Cascadia Mono Light"
"Cascadia Mono SemiBold"
"Cascadia Mono SemiLight"
"Castellar"
"Centaur"
"Century"
"Century Gothic"
"Century Schoolbook"
"Chiller"
"Colonna MT"
"Comic Sans MS"
"Consolas"
"Constantia"
"Cooper Black"
"Copperplate Gothic Bold"
"Copperplate Gothic Light"
"Corbel"
"Corbel Light"
"Courier"
"Courier New"
"Curlz MT"
"DengXian"
"Dubai"
"Dubai Light"
"Dubai Medium"
"Ebrima"
"Edwardian Script ITC"
"Elephant"
"Engravers MT"
"Eras Bold ITC"
"Eras Demi ITC"
"Eras Light ITC"
"Eras Medium ITC"
"Felix Titling"
"Fixedsys"
"Footlight MT Light"
"Forte"
"Franklin Gothic Book"
"Franklin Gothic Demi"
"Franklin Gothic Demi Cond"
"Franklin Gothic Heavy"
"Franklin Gothic Medium"
"Franklin Gothic Medium Cond"
"Freestyle Script"
"French Script MT"
"Gabriola"
"Gadugi"
"Garamond"
"Georgia"
"Gigi"
"Gill Sans MT"
"Gill Sans MT Condensed"
"Gill Sans MT Ext Condensed Bold"
"Gill Sans Ultra Bold"
"Gill Sans Ultra Bold Condensed"
"Gloucester MT Extra Condensed"
"Goudy Old Style"
"Goudy Stout"
"Haettenschweiler"
"Harlow Solid Italic"
"Harrington"
"High Tower Text"
"HoloLens MDL2 Assets"
"HP Simplified"
"HP Simplified Light"
"Impact"
"Imprint MT Shadow"
"Informal Roman"
"Ink Free"
"Javanese Text"
"Jokerman"
"Juice ITC"
"Kristen ITC"
"Kunstler Script"
"Leelawadee"
"Leelawadee UI"
"Leelawadee UI Semilight"
"Lucida Bright"
"Lucida Calligraphy"
"Lucida Console"
"Lucida Fax"
"Lucida Handwriting"
"Lucida Sans"
"Lucida Sans Typewriter"
"Lucida Sans Unicode"
"Magneto"
"Maiandra GD"
"Malgun Gothic"
"Malgun Gothic Semilight"
"Marlett"
"Matura MT Script Capitals"
"Microsoft Himalaya"
"Microsoft JhengHei"
"Microsoft JhengHei Light"
"Microsoft JhengHei UI"
"Microsoft JhengHei UI Light"
"Microsoft MHei"
"Microsoft NeoGothic"
"Microsoft New Tai Lue"
"Microsoft PhagsPa"
"Microsoft Sans Serif"
"Microsoft Tai Le"
"Microsoft Uighur"
"Microsoft YaHei"
"Microsoft YaHei UI"
"Microsoft YaHei UI Light"
"Microsoft Yi Baiti"
"MingLiU-ExtB"
"MingLiU_HKSCS-ExtB"
"Mistral"
"Modern"
"Modern No. 20"
"Mongolian Baiti"
"Monotype Corsiva"
"MS Gothic"
"MS Outlook"
"MS PGothic"
"MS Reference Sans Serif"
"MS Reference Specialty"
"MS Sans Serif"
"MS Serif"
"MS UI Gothic"
"MT Extra"
"MV Boli"
"Myanmar Text"
"Niagara Engraved"
"Niagara Solid"
"Nirmala UI"
"Nirmala UI Semilight"
"OCR A Extended"
"Old English Text MT"
"Onyx"
"Palace Script MT"
"Palatino Linotype"
"Papyrus"
"Parchment"
"Perpetua"
"Perpetua Titling MT"
"Playbill"
"PMingLiU-ExtB"
"Poor Richard"
"Pristina"
"Rage Italic"
"Ravie"
"Rockwell"
"Rockwell Condensed"
"Rockwell Extra Bold"
"Roman"
"Sans Serif Collection"
"Script"
"Script MT Bold"
"Segoe Fluent Icons"
"Segoe Marker"
"Segoe MDL2 Assets"
"Segoe Print"
"Segoe Script"
"Segoe UI"
"Segoe UI Black"
"Segoe UI Emoji"
"Segoe UI Historic"
"Segoe UI Light"
"Segoe UI Semibold"
"Segoe UI Semilight"
"Segoe UI Symbol"
"Segoe UI Variable"
"Segoe UI Variable Display"
"Segoe UI Variable Display Light"
"Segoe UI Variable Display Semib"
"Segoe UI Variable Display Semil"
"Segoe UI Variable Small"
"Segoe UI Variable Small Light"
"Segoe UI Variable Small Semibol"
"Segoe UI Variable Small Semilig"
"Segoe UI Variable Text"
"Segoe UI Variable Text Light"
"Segoe UI Variable Text Semibold"
"Segoe UI Variable Text Semiligh"
"Segoe WP"
"Segoe WP Black"
"Segoe WP Light"
"Segoe WP Semibold"
"Segoe WP SemiLight"
"Showcard Gothic"
"SimSun-ExtB"
"Sitka"
"Sitka Banner"
"Sitka Banner Semibold"
"Sitka Display"
"Sitka Display Semibold"
"Sitka Heading"
"Sitka Heading Semibold"
"Sitka Small"
"Sitka Small Semibold"
"Sitka Subheading"
"Sitka Subheading Semibold"
"Sitka Text"
"Sitka Text Semibold"
"SketchFlow Print"
"Small Fonts"
"Snap ITC"
"Stencil"
"Sylfaen"
"Symbol"
"System"
"Tahoma"
"Tempus Sans ITC"
"Terminal"
"Times New Roman"
"Trebuchet MS"
"Tw Cen MT"
"Tw Cen MT Condensed"
"Tw Cen MT Condensed Extra Bold"
"Unispace"
"Verdana"
"Viner Hand ITC"
"Vivaldi"
"Vladimir Script"
"Webdings"
"Wide Latin"
"Wingdings"
"Wingdings 2"
"Wingdings 3"
"Yu Gothic"
"Yu Gothic Light"
"Yu Gothic Medium"
"Yu Gothic UI"
"Yu Gothic UI Light"
"Yu Gothic UI Semibold"
"Yu Gothic UI Semilight"
"仿宋"
"华文中宋"
"华文仿宋"
"华文宋体"
"华文彩云"
"华文新魏"
"华文楷体"
"华文琥珀"
"华文细黑"
"华文行楷"
"华文隶书"
"宋体"
"幼圆"
"微软雅黑"
"微软雅黑 Light"
"新宋体"
"方正姚体"
"方正等线"
"方正舒体"
"楷体"
"等线"
"等线 Light"
"隶书"
"黑体"
<think>好的,我现在需要解决用户的问题:如何在Linux环境中通过Qt获取系统的默认字体或可用字体列表。首先,我应该回忆一下Qt中处理字体的相关类和函数。 用户提到的是Linux环境下的Qt应用,所以需要了解Qt在Linux下如何访问系统字体。Qt通常使用QFont类来处理字体相关的操作。我记得QFontDatabase类可能和获取字体列表有关,因为它提供了系统中可用字体的信息。 首先,获取所有可用字体家族的名称。可能需要使用QFontDatabase的families()方法,这个方法返回一个QStringList,包含所有可用的字体家族名称。这样用户就可以遍历这个列表获取所有字体。 接下来,关于默认字体的问题。在Qt中,应用程序有一个默认的字体设置,可以通过QApplication::font()方法获取。这个方法返回一个QFont对象,表示当前应用程序的默认字体。例如,在Linux系统中,默认字体可能取决于系统主题或Qt的配置。 另外,用户可能需要知道如何获取更详细的字体信息,比如样式和大小。QFontDatabase还提供了styles()和pointSizes()等方法,可以查询特定字体的样式和可用大小。 需要注意的是,Linux系统中字体文件的存放路径通常是/usr/share/fonts/或者用户主目录的.fonts/目录。不过,QtQFontDatabase已经抽象了这些细节,直接通过API就可以访问,不需要手动查找字体文件。 还需要考虑权限问题,如果应用程序没有权限读取系统字体目录,可能会导致获取字体列表失败。但在一般情况下,Qt应用应该能够访问系统安装的字体。 总结步骤应该是: 1. 使用QFontDatabase::families()获取所有字体家族名称。 2. 使用QApplication::font()获取应用程序的默认字体。 3. 可选:使用QFontDatabase的其他方法获取更详细的字体信息。 另外,可能需要编写示例代码来演示这些步骤,帮助用户理解如何实现。例如,在Qt项目中包含必要的头文件,初始化QApplication后调用这些方法。 还要注意处理可能的异常情况,比如系统中没有安装字体时的情况,或者Qt配置不正确导致的错误。例如,引用中的错误提示“Default font name can't be null or empty.”可能出现在未正确设置字体时,因此确保正确获取默认字体可以避免此类问题。 最后,结合用户提供的引用,特别是引用[2]和[4],说明Qt的GUI模块处理字体,以及可能需要在Qt项目中正确配置字体路径,确保能够访问系统或用户安装的字体。</think>在Linux环境下通过Qt获取系统字体信息,可以通过以下步骤实现: ### 一、获取可用字体列表 Qt提供了$QFontDatabase$类用于访问系统字体信息,使用其静态方法$families()$获取所有可用字体名称列表: ```cpp #include <QFontDatabase> #include <QStringList> QStringList getSystemFonts() { QFontDatabase fontDB; return fontDB.families(); // 返回所有字体家族名称 } ``` 该方法会返回类似$["Noto Sans", "思源黑体", "DejaVu Sans"]$的列表[^4]。 ### 二、获取默认字体 通过$QApplication::font()$获取应用程序默认字体: ```cpp #include <QApplication> #include <QFont> QFont getDefaultFont() { return QApplication::font(); // 返回当前默认QFont对象 } ``` 默认字体信息包含家族名、字号等属性,例如:$family="Noto Sans", size=9$。 ### 三、扩展应用 1. **字体详细信息**:通过$QFontDatabase$可获取字体的样式、字号等信息: ```cpp QFontDatabase fontDB; QStringList styles = fontDB.styles("思源黑体"); // 获取字体样式 QList<int> sizes = fontDB.pointSizes("思源黑体", "Bold"); // 获取可用字号 ``` 2. **字体路径验证**:Linux系统字体通常存储在: $$ /usr/share/fonts/ $$ $$ ~/.local/share/fonts/ $$ Qt会自动加载这些路径下的字体文件[^1][^2]。 ### 四、注意事项 - 需要确保Qt应用程序有读取字体目录的权限 - 若出现字体缺失警告(如$Default font name can't be null$),需检查字体配置文件[^3] - 嵌入式设备需手动添加字体文件到Qt库路径[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值