Qt 的 QFontMetrics::horizontalAdvance() 缺少代码编辑器实现

问题描述 投票:0回答:3

我正在为简单的脚本语言实现一个代码编辑器,并一直使用 Qt 代码编辑器示例 (http://doc.qt.io/qt-5/qtwidgets-widgets-codeeditor-example.html) 作为使用行号实现 QPlainTextEdit 的指南。该示例使用基本小部件的 fontMetrics() 方法“horizontalAdvance”来查询单个字符的宽度(或更好的提前量)。

方法

QFontMetrics::horizontalAdvance(QChar)
(参见http://doc.qt.io/qt-5/qfontmetrics.html#horizontalAdvance-1)可以在Qt文档中找到但我的实现似乎缺少这个方法 .

我在 Windows 10 上使用 Qt 5.10.1“msvc2017_64”和 Visual Studio Enterprise 2017 版本 15.7.3。我已经在标题中搜索了缺少的方法,但只找到了

QTextLine::horizontalAdvance()
,这不是我需要的。

我已将

QFontMetrics::horizontalAdvance(QChar)
调用替换为对
QFontMetrics::width(QChar)
的调用,该调用正在使用我当前的字体(Consolas),但我不确定它是否适用于每种可能的字体。

问题 1) QFontMetrics::horizontalAdvance() 是否已从当前版本的 Qt 中删除,是我的安装有问题还是我错过了什么?

问题 2) 获取特定(非比例)字体预付款的正确方法是什么?

感谢您阅读本文并尽力提供帮助!

c++ qt visual-studio-2017 qt5.10
3个回答
12
投票

正如 G.M. 在评论中告诉我的:

文档指出 QFontMetrics::horizontalAdvance(QChar) 在Qt5.11之前不可用。

因此切换到 Qt 5.11 解决了这个问题。


5
投票

您可以使用

width
代替
horizontalAdvance

成员函数

width
列于 QFontMetrics 的过时成员,建议使用
horizontalAdvance
而不是
width
。 我猜这两个成员函数有类似的行为。


0
投票

您可以使用此代码使其适用于所有 Qt 版本:

#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
  return qFontMetrics().horizontalAdvance(text);
#else
  return qFontMetrics().width(text);
#endif
© www.soinside.com 2019 - 2024. All rights reserved.