Qt QFontMetrics::horizontalAdvance() отсутствует для реализации редактора кода

Я реализую редактор кода для простого языка сценариев и использую пример редактора кода Qt ( http://doc.qt.io/qt-5/qtwidgets-widgets-codeeditor-example.html) в качестве руководства для реализация QPlainTextEdit с номерами строк. В этом примере метод fontMetrics() базового виджета 'горизонтальный_представитель' используется для запроса ширины (или, лучше, продвижения) одного символа.

Метод QFontMetrics::horizontalAdvance(QChar) (см. http://doc.qt.io/qt-5/qfontmetrics.html) можно найти в документации по Qt, но моя реализация, похоже, отсутствует в этом методе.

Я использую Qt 5.10.1 "msvc2017_64" в Windows 10 с Visual Studio Enterprise 2017 версии 15.7.3. Я искал в заголовках отсутствующий метод, но нашел только QTextLine::horizontalAdvance() что не то, что мне нужно.

Я заменил QFontMetrics::horizontalAdvance(QChar) позвонить с призывом к QFontMetrics::width(QChar) который работает с моим текущим шрифтом (Consolas), но я не уверен, нормально ли это для каждого возможного шрифта.

Вопрос 1) Был ли QFontMetrics::horizontalAdvance() удален из текущей версии Qt, моя установка глючит или я что-то пропустил?

Вопрос 2) Как правильно получить аванс за определенный (непропорциональный) шрифт?

Спасибо, что прочитали это и пытаетесь помочь!

3 ответа

Решение

Как G.M. сказал мне в комментарии:

В документации говорится, что QFontMetrics::horizontalAdvance(QChar) не был доступен до Qt5.11.

Так что переход на Qt 5.11 решает эту проблему.

Вы можете использовать width вместо того horizontalAdvance.

Функция-член widthуказан в Устаревших членах для QFontMetrics и предлагает использоватьhorizontalAdvance вместо того width. Я предполагаю, что эти две функции-члены имеют аналогичное поведение.

Вы можете использовать этот код для решенияerror: no member named 'horizontalAdvance' in 'QFontMetrics'и чтобы он работал для всех версий Qt:

      #if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
  return qFontMetrics().horizontalAdvance(text);
#else
  return qFontMetrics().width(text);
#endif
Другие вопросы по тегам