我正在为简单的脚本语言实现一个代码编辑器,并一直使用 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) 获取特定(非比例)字体预付款的正确方法是什么?
感谢您阅读本文并尽力提供帮助!
您可以使用
width
代替 horizontalAdvance
。
成员函数
width
列于
QFontMetrics 的过时成员,建议使用 horizontalAdvance
而不是 width
。
我猜这两个成员函数有类似的行为。
您可以使用此代码使其适用于所有 Qt 版本:
#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
return qFontMetrics().horizontalAdvance(text);
#else
return qFontMetrics().width(text);
#endif