代码编辑器实现缺少Qt的QFontMetrics :: horizo​​ntalAdvance()

时间:2018-06-14 19:50:19

标签: c++ qt visual-studio-2017 qt5.10

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

方法video.setPlayPauseListener(new CustomVideoView.PlayPauseListener() { @Override public void onPlay() { System.out.println("Play!"); videoPlaypauseIcon.setVisibility(View.VISIBLE); } @Override public void onPause() { System.out.println("Pause!"); videoPlaypauseIcon.setVisibility(View.INVISIBLE); } }); (请参阅http://doc.qt.io/qt-5/qfontmetrics.html#horizontalAdvance-1)可以在Qt文档中找到,但我的实现似乎缺少此方法

我正在使用Qt 5.10.1' msvc2017_64'在Windows 10上使用Visual Studio Enterprise 2017版本15.7.3。我已经在标题中搜索了丢失的方法,但只找到了QFontMetrics::horizontalAdvance(QChar)这不是我需要的。

我已使用当前字体(Consolas)调用QTextLine::horizontalAdvance()来替换QFontMetrics::horizontalAdvance(QChar)调用,但我不确定它是否适用于所有可能的字体。

问题1)QFontMetrics :: horizo​​ntalAdvance()是否已从当前版本的Qt中移除,是我的安装工具还是我错过了什么?

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

感谢您阅读本文并尝试提供帮助!

2 个答案:

答案 0 :(得分:4)

G.M.在评论中告诉我:

  

文档指出,直到 Qt5.11 ,QFontMetrics :: horizo​​ntalAdvance(QChar)才可用。

因此切换到Qt 5.11可以解决此问题。

答案 1 :(得分:3)

您可以使用width代替horizontalAdvance

成员函数width列在 Obsolete Members for QFontMetrics,并建议使用horizontalAdvance代替width。 我猜这两个成员函数的行为类似。