Пишу кастомный контрол отображающий текст программы на C. Как известно, для текстов программ лучше всего использовать моноширные шрифты. Но в разных системах эти шрифты по разному называются. Можно ли при создании шрифта не указывать family, а просто указать что нужен любой моноширный шрифт?
Можно узнать моноширинный шрифт или нет как это делается в документации к классу http://doc.qt.nokia.com/latest/qstringlist.html
QStringList monospacedFonts = fonts.filter(QRegExp("Courier|Fixed"));
#ifdef Q_OS_WIN32
const char* fontName = "Courier";
#else if defined(Q_OS_LINUX)
const chat* fontName = "Monospace";
#else ......
frg10,
способов много.
1. таскать нужные шрифты с собой(у меня так сделано)QFontDatabase::addApplicationFont
2. спосбоб который предложил SABROG хорош тем что ты потом сможешь выбрать на контроле каким шрифтом рисовать если их несколько. т.е. пользователь сможет выбрать доступные шрифты для отображения.
QFontDatabase в помощь.
3. QFont класс довольно таки негромоздкий. создать 3-5 шрифтов и с помощью bool QFont::exactMatch () const ,будешь знать какой шрифт доступен в системе.
4 ...
раз уж так хочется красивого решения.
можно потратить время на поиски кросплаттформенной программы использующей моноширные шрифты и посомотреть как делают там:)
font.setStyleHint(QFont::TypeWriter);
, но, блин, под иксами не работает. #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)