如何为跨平台Qt应用程序指定等宽字体?

Lup*_*uch 55 fonts qt

是否有一种独立于平台的方式来为Qt小部件指定固定宽度的字体?

如果我在Linux上的Designer中将字体设置为"Monospace",则在Windows上找不到它,而是使用Arial.

Tor*_*rek 52

您可以使用QFont 的样式提示属性:

QFont font("Monospace");
font.setStyleHint(QFont::TypeWriter);
Run Code Online (Sandbox Code Playgroud)

如果找不到该字体(在Windows上使用Monospace时会发生这种情况),Qt的字体匹配算法会尝试查找与给定样式提示相匹配的字体.

  • 一个有用的附录:该代码仅在您将姓氏传递给QFont构造函数时才有效.否则,它将使用默认字体系列,它将是可变宽度,然后覆盖样式提示.我不得不这样做,`QFont font("");`,当我没有特定的等宽字体要求时. (6认同)
  • 出于好奇:为什么不`QFont :: Monospace`? (3认同)

小智 31

您可以使用QFontDatabase的systemFont(..)函数检索系统的默认固定字体.它在Qt 5.2中引入.

例:

const QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont)
Run Code Online (Sandbox Code Playgroud)

  • 在Qt 5之前? (3认同)

blu*_*her 18

对于所有接受Rich Text的小部件,您可以简单地将其放入一个pre块中,即<pre>This is my Text</pre>.然后它将使用系统monospace字体.

  • 我在我的程序中尝试了这个并且它有效,但它也在 pre 标签后面添加了一个换行符。我不知道如何摆脱它,所以我尝试了 &lt;font face="monospace"&gt;text&lt;/font&gt; 并且奏效了!不过,我还没有验证我的解决方案是可移植的。 (3认同)

小智 5

我在Linux和Windows的Qt中都使用Courier。