Различная высота строки QTextEdit на Mac и Windows

Я разрабатываю приложение текстового редактора на основе QTextEdit/QGraphicsTextItem и заметил, что результаты QTextEdit в Windows отличаются от результатов на Mac.

В частности, при тестировании с многострочным текстовым фрагментом в образце «Редактирование текста» Qt 4.8.5:

  • При использовании больших размеров шрифта (48pt) макет текста практически идентичен
  • При использовании небольшого размера шрифта (8pt) текстовый фрагмент имеет заметно большую высоту в Windows.

Я нашел пару связанных вопросов StackOverflow, но не нашел в них подходящего ответа. Поэтому я попытался копнуть глубже и выяснил следующее:

  • Размер шрифта 48pt: высота строки на Mac и Windows очень близка друг к другу (оба около 60%).
  • Размер шрифта 8pt: высота строки на Mac составляет около 50%. В Windows это около 75%

Говоря о «высоте строки», я сравнил высоту подъема (т. е. высоту «T») с высотой между ними (между двумя текстовыми строками).

Вот скриншот, показывающий проблему. Красные линии — это базовые линии текстовых строк Mac.:

Сравнение высоты строки Mac/Windows

Кажется, что высота строки приводит к тому, что макет текста на Mac и Windows отличается. Есть ли способ в Qt обеспечить идентичное расположение текста на Mac и Windows (Microsoft Word удается это сделать)? Или у кого-нибудь есть другие предложения по этому поводу?


person Fabian    schedule 17.01.2014    source источник
comment
Это тоже разница между нативными приложениями? Например, блокнот по сравнению с эквивалентом Mac, будет ли у них такая же разница, если шрифт будет одинаковым? Может быть, дело в том, что в операционных системах используются разные соглашения об отображении шрифтов, а Qt пытается выглядеть нативным в Mac.   -  person sashoalm    schedule 17.01.2014
comment
Одним из вариантов было бы проверить, ведет ли QPlainTextEdit по-другому, и если он не соответствует вашим потребностям и может удовлетворить ваши потребности, это может быть альтернативным решением.   -  person Ilya Kobelevskiy    schedule 17.01.2014
comment
@sashoalm: я не думаю, что имеет смысл сравнивать Microsoft Wordpad с Apple TextEdit. Они имеют разную кодовую базу и могут использовать разные метрики шрифта/код рендеринга. Я сравнил Microsoft Word на Win7 и MacOS, и они очень близки друг к другу (не на 100% идентичны, но достаточно близки).   -  person Fabian    schedule 17.01.2014
comment
@IlyaKobelevskiy: QPlainText не поддерживает форматирование расширенного текста, верно (жирный, курсив, нумерованные списки, ...)? В этом случае, к сожалению, это не будет альтернативой для моего приложения.   -  person Fabian    schedule 17.01.2014
comment
К сожалению, я не нашел решения этой проблемы, поэтому не могу отметить здесь ответ как решение. На самом деле это просто похоже на то, что макет текста не обязательно будет идентичен на разных платформах в Qt.   -  person Fabian    schedule 23.01.2014


Ответы (1)


Если я не ошибаюсь, Qt 4.8 в Mac использует системный движок рендеринга, а Windows и другие платформы используют Harfbuzz. Qt 5.X использует Qt Harfbuzz для всех платформ. Два разных механизма рендеринга вряд ли будут иметь одинаковый результат рендеринга. Попробуйте с Qt 5.2, если сможете.

person Dasun    schedule 18.01.2014
comment
Очень хороший момент, я не знал об этом. Я сделал тестовый порт приложения на Qt 5.2. Макет текста в некоторых случаях отличается от Qt 4.8, но все же сильно отличается от версии для Windows. Тем не менее, стоило попробовать. Кстати: кажется возможным включить HarfBuzz для Mac также в версии 4.8: bugreports.qt- project.org/browse/QTBUG-17728 - person Fabian; 20.01.2014