首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在Qt样式表中指定字体的“常规”和“粗体”版本之外的更多版本?

是否可以在Qt样式表中指定字体的“常规”和“粗体”版本之外的更多版本?
EN

Stack Overflow用户
提问于 2013-02-16 03:27:31
回答 1查看 5.6K关注 0票数 11

我有一个字体,它在一个系列中有几个字体粗细(额外的轻,轻,常规,半粗,粗体,黑色)。在本例中,我使用的是免费的Google Webfont Source Sans Pro,但对于任何具有多个粗细的字体(例如Avenir Next,MacOS10.8中的系统字体),我都遇到过同样的问题。在Qt样式表中,如果我指定:

代码语言:javascript
复制
QLabel
{
    font-family: Source Sans Pro;
    font-size:   24px;
}

我得到了字体的“常规”样式。如果我指定:

代码语言:javascript
复制
QLabel
{
    font-family: Source Sans Pro;
    font-weight: bold;
    font-size:   24px;
}

我得到了粗体版本的字体。我想不出除了regular或Bold之外的任何组合。我尝试将权重直接放入字体系列(例如,字体系列: Source Sans Pro Light;),我尝试在x00 - weight :说明符中使用Light、Semibold等,我还尝试使用数字等效项(Qt documentation说它们应该是从0到99的值,而不是CSS编号)。毫无办法。

编辑:我刚刚试着写了一个快速程序,在font-weight属性中输入介于0和999之间的数字。有趣的是,如果我放入0到399之间的任何值,我就能得到“光”。400到407给了我“常规”,408到599又给了我光,然后600或更高的给了我半黑体。这似乎真的很奇怪,因为现在使用数字,我至少可以访问"light“和”semibold“。我仍然找不到任何方法来获得“额外的光”或“黑”的权重。

我唯一的问题是,如果不求助于定制代码,这是不可能的吗?我可以通过创建一个QFont来获得我想要的字体,如下所示:

代码语言:javascript
复制
QFontDatabase db;
QFont = db.font("Source Sans Pro", "Semibold", 24 );

但很明显,这意味着我不能使用样式表(或者更糟糕的是,我必须编写自己的样式表解析器或包装现有的Qt解析器或其他东西)。这似乎有点让人难以相信,这在样式表中是不可能的。多重字体在Qt中的支持很差吗?

EN

回答 1

Stack Overflow用户

发布于 2013-02-16 08:13:30

最后,我浏览了Qt源代码,我想我找到了答案。简而言之,不,这不可能。或者至少,这取决于字体,甚至可能取决于平台(我使用的是Mac和Qt 4.8.4)。

QFonts具有两种字体“粗细”(由QFont::setWeight()设置),它是一个从0到99的数字。它们还有一个由QFont::setStyleName()设置的"Style Name“。您可以在样式表中使用styleName - weight设置权重,但不能设置font-weight (我通过查看qcssparser的源码确认了这一点)。有一个font-style参数,但它只能用于设置正常、斜体或斜体...也就是说,它调用QFont::setStyle(),而不是setStyleName()。

至少在我的例子中,访问字体某些粗细的唯一方法是通过"Style Name“,给它一个特定的字符串,比如"Extra Light”。显然,Qt正在做一些内部(可能是特定于平台的)魔术,在0-99权重数字和样式名称之间进行转换,但它似乎做得并不好。我陷入了Qt源代码的泥潭,无法真正弄清楚这个映射发生在哪里。

更奇怪的是,QFont::setWeight采用一个介于0-99之间的数字(如我前面所述),但是样式表中的font-weight属性采用一个介于100和800之间的数字,然后将其除以8并调用setWeight。我想这是为了更好地匹配CSS weight numbering system

现在我只需要弄清楚我该怎么做才能绕过这个问题。我可以很容易地将像font-style-name这样的东西添加到qcssparser中,但我不想修补Qt源代码,所以我可能会在应用程序级别做一些事情。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14901933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档