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