Неправильный размер текста приложения Qt в MacOSX

Проектирование пользовательского интерфейса с помощью QtCreator под Windows и портирование того же файла .ui под MacOSX приводит к тому, что некоторые текстовые части очень маленькие — на самом деле HTML. Похоже, это связано с тем, что QtCreator использует pt вместо px в качестве единицы размера текста и что разрешения экрана по умолчанию сильно различаются в Windows и MacOSX.

Есть ли какая-то причина, по которой я не пришел к более последовательным результатам? Помимо изменения каждого pt в px, есть ли обходной путь?

Спасибо.


person moala    schedule 05.01.2010    source источник
comment
Я рекомендую связаться с ребятами из Nokia/Trolltech по этому поводу в форме отчета об ошибке. они обычно очень отзывчивы, и это можно считать ошибкой. Если вы можете создать минимальный пример и снимки экрана, это также облегчит их работу.   -  person shoosh    schedule 09.01.2010


Ответы (2)


Как правило, вы не должны указывать размеры шрифта для элементов управления вручную в Qt Designer/Creator, поскольку это приводит к проблемам, которые у вас есть. Причиной несоответствия является тот факт, что разные платформы используют разные настройки DPI (96 dpi в Windows и 72 dpi в Mac OS X). Это приводит к тому, что шрифты отображаются с разными размерами.

Кроме того, вы упомянули HTML. Я предполагаю, что вы установили HTML-текст в QTextEdit-подобном виджете с помощью встроенного редактора. Когда вы выберете там размер шрифта, Qt Creator создаст такой HTML-код:

<!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:'Sans'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hello World</p></body></html>

Как видите, он устанавливает некоторые атрибуты font-size, что очень неприятно. Простое и легкое решение этой катастрофы — полностью удалить атрибуты style=. Это заставляет QTextEdit вместо этого использовать шрифт приложения по умолчанию (что должно быть хорошо на всех платформах):

<html><head></head><body><p>Hello World</p></body></html>

Кстати, это гораздо удобнее для переводчиков, так как им не нужно бороться со всем бесполезным CSS.

К сожалению, QTextEdit Qt не поддерживает "процентную" спецификацию размера шрифта (только px и pt). Если бы это было так, вы могли бы использовать что-то вроде «90%», чтобы сделать текст меньше шрифта по умолчанию, оставаясь при этом в безопасности.

Другим вариантом будет QWebView, который вы сделаете редактируемым. Это обеспечивает хорошее форматирование текста при наличии полного подмножества CSS. Но это может быть лишним.

Надеюсь, это поможет!

person BastiBen    schedule 09.01.2010
comment
Ну, вы объяснили большую часть проблемы; тем не менее, это не устраняет чрезмерности всего этого. В любом случае спасибо за время, потраченное на это. - person moala; 11.01.2010
comment
Какой перебор? На самом деле, если ваша проблема та, которую я описал выше, я не знаю другого способа ее исправить. Qt Creator/Designer просто имеет неприятное поведение, которое размещает определения размера шрифта во всем HTML, который он создает. Единственный способ обойти шрифты, приводящие к разным размерам на разных платформах, — это удалить эти определения размера шрифта из HTML. Это то, что я делаю в своих собственных приложениях. - person BastiBen; 11.01.2010
comment
Ага. Но часто важнее то, что это работает, чем то, что это было легко сделать. Я не говорю, что это удобный способ обойти эту проблему, но вы спрашивали о решении вашей проблемы, как описано выше. Вот. - person BastiBen; 13.01.2010
comment
Это было так сложно понять, но я избавился от стиля, щелкнув правой кнопкой мыши свои QLabels и выбрав «Редактировать обычный текст», а также удалив любой пользовательский стиль шрифта на метках/кнопках, нажав кнопку сброса (наклоняющаяся стрелка) . Сработало очарование! - person Rob; 30.09.2010

Вам нужно установить свойства текста в ваших .ui файлах? Обычно, когда вы устанавливаете свойство text виджета, UIC полностью заменяет шрифт этого виджета чем-то, что он создает с нуля в коде. Если вы отредактируете их в Windows, шрифт будет иметь имя, связанное с Windows, что может вызвать проблемы на Mac.

Что я обычно делаю, так это не трогаю шрифты в дизайнере, чтобы виджеты получали свои шрифты по умолчанию, которые обычно выглядят нормально, и меняю их в c'tor виджета следующим образом:

QFont f = ui.someLabel->font(); // get the current (default) font from the widget
f.setBold(true); // change only what's need to be changed
ui.someLabel->setFont(f); 
      // set the new and impreved font back to where it came from

Таким образом, вы можете не связываться со всем, что зависит от платформы. Если ваше изменение действительно зависит от платформы, вы можете выбрать правильное с помощью #ifdef Q_OS_WIN32 или #ifdef Q_OS_MAC.

person shoosh    schedule 08.01.2010
comment
Спасибо за Ваш ответ. Что ж, это способ работы с элементами, не имеющими расширенного форматирования. Но это позор, QtCreator не обрабатывает это независимо от платформы. - person moala; 11.01.2010