2011-02-08 3 views
2

У меня есть фиксированные по размеру окна, под которыми у меня есть текстовые метки. Хотя я использую тот же шрифт, шрифты выглядят по-разному в Windows, Mac и Linux, вплоть до того момента, когда я не могу положиться на то, где будет заканчиваться ярлык, даже если строка и размер шрифта являются постоянными в моем приложении.QT: Шрифты и их ширина

Есть ли какое-либо решение? Кто-то упомянул о встраивании шрифтов TTF и их использовании, но это действительно необходимо?

+0

Что вы пытаетесь сделать, это зависит от того, где заканчивается текстовая метка? –

+1

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

ответ

3

Нет шрифта, на который вы можете положиться, будучи доступным на всех платформах, а соотношение высоты и ширины для разных строк будет отличаться для разных шрифтов (фиксированная ширина будет немного лучше). Кроме того, такие вещи, как разные настройки DPI, могут вызывать головные боли даже при использовании одного и того же шрифта. Я предпочел бы пересмотреть, действительно ли ваши виджеты должны быть фиксированными, и вам нужны эти предположения о размере шрифта вообще. Практически во всех случаях ваш пользовательский интерфейс будет более удобным, читаемым и совместимым с остальной частью рабочего стола, если вы используете гибкие макеты и придерживаетесь любого шрифта и размера шрифта, предлагаемого платформой.

+0

ouch. я боялся этого ответа. – JasonGenX

1

Вы можете использовать QFont::setPixelSize, чтобы гарантировать согласованный размер шрифта на всех платформах.

1

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

QFontMetrics предоставляет boundingRect() семейство вызовов, чтобы найти способ, которым должна занимать текстовая строка при рисовании в заданном шрифте. С их помощью вы можете проверить, может ли строка помещаться в пространстве. Если он не подходит, уменьшите размер шрифта и повторите тест.

Смежные вопросы