Sco*_*ttG 10 fonts qt stylesheet qtstylesheets
我有一个字体,在一个家庭中有多个字体权重(额外的光,光,常规,半粗体,粗体,黑色).对于这个例子,我使用免费的Google Webfont Source Sans Pro,但我对任何具有多个权重的字体都有同样的问题(例如Avenir Next,Mac OS 10.8中的系统字体).在Qt样式表中,如果我指定:
QLabel
{
font-family: Source Sans Pro;
font-size: 24px;
}
Run Code Online (Sandbox Code Playgroud)
我得到了字体的"常规"样式.如果我指定:
QLabel
{
font-family: Source Sans Pro;
font-weight: bold;
font-size: 24px;
}
Run Code Online (Sandbox Code Playgroud)
我得到了字体的粗体版本.我无法弄清楚任何组合会给我除了常规或大胆以外的任何东西.我尝试将重量直接放在font-family中(例如,font-family:Source Sans Pro Light;),我尝试在font-weight:说明符中使用Light,Semibold等,我也尝试使用数字等价物(Qt文档说它们应该是0到99之间的值而不是CSS x00编号.什么都行不通.
编辑:我只是尝试编写一个快速程序,以0到999之间的数字为font-weight属性.有趣的是,如果我放入0到399之间的任何东西,我就能得到"光".400到407给了我"常规",408到599给了我光,然后600或更高给了我半哑.这看起来很奇怪,因为现在使用数字我至少可以访问"light"和"semibold".我仍然找不到任何方法来获得"额外光"或"黑色"重量.
我唯一的问题是,如果不诉诸自定义代码,这是不可能的吗?我可以通过创建QFont获得我想要的确切字体,如下所示:
QFontDatabase db;
QFont = db.font("Source Sans Pro", "Semibold", 24 );
Run Code Online (Sandbox Code Playgroud)
但显然这意味着我不能使用样式表(或者更糟糕的是,我必须编写自己的样式表解析器或将现有的Qt包装起来).这似乎有点难以相信样式表无法做到这一点.Qt中是否支持多重字体?
终于通过Qt来源了,我想我找到了答案.总之,不,不可能.或者至少,它取决于字体,甚至可能是平台(我使用Qt 4.8.4在Mac OS X中工作).
QFonts有两种字体"权重"(由QFont :: setWeight()设置),这是一个0-99的数字.它们还有一个"样式名称",由QFont :: setStyleName()设置.您可以在样式表中使用font-weight设置权重,但不能设置styleName(我通过查看qcssparser的来源确认).有一个font-style参数,但只能用于设置normal,italic或oblique ......也就是说,它调用QFont :: setStyle(),而不是setStyleName().
至少在我的情况下,访问字体的某些权重的唯一方法是"样式名称",给它一个特定的字符串,如"Extra Light".显然,Qt正在做一些内部(也许是特定于平台)的魔术,可以在0-99的重量数和一个样式名之间进行转换,而且它似乎做得不好.我在Qt源代码中陷入困境,无法确切地弄清楚这种映射的确切位置.
为了增加奇怪性,QFont :: setWeight取0到99之间的数字(如前所述),但样式表中的font-weight属性取一个介于100和800之间的数字,然后将其除以8并调用setWeight.我想这是为了更接近地匹配CSS权重编号系统.
现在我只需要弄清楚我要做什么样的黑客来解决这个问题.我可以轻松地将类似font-style-name的内容添加到qcssparser中,但我宁愿不修补Qt源代码,所以我可能会在应用程序级别做一些事情.