Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Моноширный шрифт по умолчанию

Автор: frg10 8.11.2009, 4:21

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

Автор: SABROG 8.11.2009, 13:37

Можно узнать моноширинный шрифт или нет как это делается в документации к классу http://doc.qt.nokia.com/latest/qstringlist.html

Автор: frg10 8.11.2009, 16:07

Цитата(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

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



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

Автор: frg10 10.11.2009, 12:46

Цитата(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


Ладно, я выберу один из способов. Тему можно закрыть

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)