Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: sk_alex от Август 07, 2006, 15:41



Название: Как зафиксировать размер шрифта в диалоге?
Отправлено: sk_alex от Август 07, 2006, 15:41
Доброго времени суток. Прошу посоветовать, как можно решить следующую проблему.

Платформа: Win2000 + Visual C++ 6.0 + Qt 3.3.3 + Qwt

Проблема: Написал программу с графическим интерфейсом, у меня на компе все работает. Однако при попытке запустить эту же exe-шку на другом компе "плывут" настройки шрифта в диалоговых окнах, на кнопках и т.д. Шрифт становится большим и надпись не умещается в заданные размеры.

Информация про комп, на котором некорректно работает:  Win XP, Qt не стоит, в настройках экрана (Панель управления - Свойства - Параметры - Дополнительно - Общие - Масштаб) стоит установка "Крупный размер (120 точек на дюйм)". Если поставить "Обычный размер (96 точек на дюйм)" - все работает правильно.

Как делалось:
Диалог рисовался при помощи Qt Designer'а. В свойствах диалога указывался фонт MS Sans Serif размером 10. При трансляции ui-файла получались такие строчки:
QFont f( font() );
f.setFamily( "MS Sans Serif" );
f.setPointSize( 10 );
setFont( f );

Вопрос. Как зафиксировать размер шрифта вне зависимости от системных настроек данной винды? Требовать от каждого пользователя использовать только определенный режим размеров системных шрифтов никак нельзя.

Заранее спасибо всем откликнувшимся.


Название: Как зафиксировать размер шрифта в диалоге?
Отправлено: Racheengel от Август 08, 2006, 00:04
а размер диалога фиксированный?
надо политиками делать


Название: Как зафиксировать размер шрифта в диалоге?
Отправлено: sk_alex от Август 08, 2006, 10:20
Размер диалога фиксированный. То есть, максимальный и минимальный размеры установлены в одно значение (как иначе сделать фиксированный размер диалога, я просто не знаю).

Установил sizePolicy на диалог и на все компоненты диалога в состояние
hSizeType: Fixed
vSizeType: Fixed
horizontalStretch: 0
verticalStretch: 0

Не помогло :-(

Да, важное замечание. Судя по тому, что написано в документации по политикам, они ориентированы на работу с лейаутами. А если я их (в смысле лейауты) не использую вовсе?

Update: Дальнейшие эксперименты. Попробовал загнать все элементы управления в лейаут (ограничив максимальные размеры каждого элемента управления). По-прежнему никаких изменений в нужную мне сторону. :-(


Название: Как зафиксировать размер шрифта в диалоге?
Отправлено: Racheengel от Август 08, 2006, 13:23
попробуй отключить фиксированный размер диалога - поставь ему политику на размер. Скорее всего из=за этого проблема.


Название: Как зафиксировать размер шрифта в диалоге?
Отправлено: sk_alex от Август 08, 2006, 14:42
Прошу прощения, не понял, что Вы имеете в виду. Фиксированного размера я добился только путем указания максимального и минимального значения размера диалога равными необходимым цифрам. Каких-либо флажков, отвечающих за то, чтобы диалог не изменял свой размер, я не нашел. Попытка разрешить диалогу изменять свой размер привела только к тому, что стало возможно менять размер диалогового окна мышкой. Проблема со шрифтами, как была, так и осталась. :-(

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

Однако такой подход в данном случае будет очень неудобен, ибо приводит к расползанию диалоговых окон и довольно свободному размещению на этих окнах компонентов. Требуется же добиться именно компактности размещения элементов управления и фиксированных шрифтов. Расползание диалоговых окон (некоторые из которых и так большие) может привести к тому, что они будут слишком большими. А в требованиях к программе имеет место быть такой пункт, как возможность работы при разрешении 640x480. Поэтому нужно не пытаться подстроиться под пользователя, желающего видеть крупные буквы, а именно зафиксировать шрифт и игнорировать системные настройки.