crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Моноширный шрифт по умолчанию
frg10
  опции профиля:
сообщение 8.11.2009, 4:21
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Пишу кастомный контрол отображающий текст программы на C. Как известно, для текстов программ лучше всего использовать моноширные шрифты. Но в разных системах эти шрифты по разному называются. Можно ли при создании шрифта не указывать family, а просто указать что нужен любой моноширный шрифт?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 8.11.2009, 13:37
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Можно узнать моноширинный шрифт или нет как это делается в документации к классу QStringList
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 8.11.2009, 16:07
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Цитата(SABROG @ 8.11.2009, 13:37) *
Можно узнать моноширинный шрифт или нет как это делается в документации к классу QStringLi

Если вы про:
    QStringList monospacedFonts = fonts.filter(QRegExp("Courier|Fixed"));


то ИМХО это плохой вариант, т.к.
1) сначала нужно получить названия всех шрифтов в системе
2) названия шрифтов захардкодены.

Можно еще сделать так:
#ifdef Q_OS_WIN32
    const char* fontName = "Courier";
#else if defined(Q_OS_LINUX)
    const chat* fontName = "Monospace";
#else ......


Но мне хочется более красивого варианта.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.11.2009, 12:28
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


frg10,
способов много.
1. таскать нужные шрифты с собой(у меня так сделано)QFontDatabase::addApplicationFont
2. спосбоб который предложил SABROG хорош тем что ты потом сможешь выбрать на контроле каким шрифтом рисовать если их несколько. т.е. пользователь сможет выбрать доступные шрифты для отображения.
QFontDatabase в помощь.
3. QFont класс довольно таки негромоздкий. создать 3-5 шрифтов и с помощью bool QFont::exactMatch () const ,будешь знать какой шрифт доступен в системе.
4 ...



раз уж так хочется красивого решения.
можно потратить время на поиски кросплаттформенной программы использующей моноширные шрифты и посомотреть как делают там:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 10.11.2009, 12:46
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Цитата(kwisp @ 10.11.2009, 12:28) *
раз уж так хочется красивого решения.

Нашел было уже красивое:
font.setStyleHint(QFont::TypeWriter);
, но, блин, под иксами не работает. :(

Цитата(kwisp @ 10.11.2009, 12:28) *
можно потратить время на поиски кросплаттформенной программы использующей моноширные шрифты и посомотреть как делают там:)

Посмотрел в QtCreator:
#ifdef Q_WS_MAC
    enum { DEFAULT_FONT_SIZE = 12 };
    static const char *DEFAULT_FONT_FAMILY = "Monaco";
#else
#ifdef Q_WS_X11
    enum { DEFAULT_FONT_SIZE = 9 };
    static const char *DEFAULT_FONT_FAMILY = "Monospace";
#else
    enum { DEFAULT_FONT_SIZE = 10 };
    static const char *DEFAULT_FONT_FAMILY = "Courier";
#endif
#endif


Ладно, я выберу один из способов. Тему можно закрыть
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.10.2019, 8:38