Относительные размеры шрифта в QT или самый переносимый способ их определения - PullRequest
4 голосов
/ 12 сентября 2011

Исходя из опыта веб-разработки, я сейчас занимаюсь разработкой приложений QT.

Работа с QFonts Я видел, что у меня есть только два варианта, по-видимому, для определения размеров шрифтов в QT;либо по размеру пикселя, либо по размеру точки.

При создании веб-макетов я привык определять все мои шрифты относительным образом ... используя em единиц, которые ссылаются на унаследованный размер шрифтагде 1em равно размеру шрифта элемента контейнера, 0.5em 50% размера шрифта, 1.5em 50% больше и т. д.

Меня беспокоит переносимость и независимость моих приложений от устройств / ОС.Есть ли лучший способ определить эти шрифты, или я должен вместо этого придерживаться одного из этих методов?Если возможно, могу ли я наследовать размеры шрифта и определять размеры в относительных единицах, таких как ems или проценты?

Ответы [ 3 ]

8 голосов
/ 12 сентября 2011

В зависимости от того, как вы разрабатываете свое приложение, я боюсь, что, помимо беспокойства о размере шрифта, вам также нужно быть очень осторожным с шрифтами, специфичными для платформы .

Например, я только что запустил Qt Designer внутри Qt Creator 2.3.0 (на основе Qt 4.7.4) - так что в значительной степени это последний стабильный код, и сделал следующее:

  • Созданновая форма Qt Designer (то есть файл .ui)
  • Сделано пустым виджетом
  • Добавлен QTextEdit (это называется «Редактирование текста» в разделе «Виджеты ввода» дизайнера)
  • Дважды щелкнул QTextEdit, чтобы открыть его свойства
  • Просмотр его источника

Вот что я вижу:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

Обратите внимание на использованиешрифта, специфичного для Windows, и очень жестко заданного размера, прежде чем я даже внесу какие-либо изменения в содержимое: font-family:'MS Shell Dlg 2'; font-size:7.8pt;

Ранее я уже сообщал об этом в службу поддержки пользователей Qt, и мне сказали (через статус багов) что там нет планов это исправить.(См. «Редактирование» ниже, для получения информации об этих ошибках)

Таким образом, на работе, каждый выпуск, мы должны искать во всех наших .ui-файлах, чтобы убедиться, что никакая информация о шрифте для конкретной платформы не проникла ни.ui файл со времени предыдущего выпуска.

(Год или два назад я запускал Designer на каждом из Mac, Windows и Linux и показывал, что каждая версия генерирует свою собственную информацию о шрифте для конкретной платформы, как эта, иочень разные размеры шрифта по умолчанию. Каждый из них не отображался правильно на двух других платформах! Текст Mac был слишком большим на двух других, а два других были слишком маленькими на Mac)

Мне очень нравитсяQt много, но я нахожу это отсутствие независимости от платформы в чем-то столь простом, что его дизайнер пользовательского интерфейса довольно разочаровывает.

Edit - информация об ошибке от TrollTech, июль 2009

Я нашел информацию, когда сообщил о «кроссплатформенных проблемах .ui - переносимости шрифтов и размеров».Я не знаю, как эти старые ссылочные номера из TrollTech в июле 2009 года переводят на текущее отслеживание проблем Qt: я надеюсь, что кто-то еще сможет обновить ссылки на текущие рабочие:

2 голосов
/ 19 сентября 2011

В настоящее время это невозможно. На мой взгляд, наиболее переносимым способом было бы использование очков. поскольку они менее зависимы от устройства, чем pxs.

0 голосов
/ 03 января 2014

в qt3 следующий код работает как минимум для фиксированных шрифтов:

QFont f=font();
int psz=f.pixelSize();
if (psz>0) f.setPixelSize(psz*6/5);
else f.setPointSizeFloat(f.pointSizeFloat()*1.2);
...