На этом шаге рассмотрим работу со шрифтами.
Гарнитура шрифта это его внешний вид (рисунок шрифта). Масштабируемая гарнитура — это идеальное математическое описание шрифта. Она позволяет отображать его на экране без искажений и выводить на печать в различных размерах. Проведение соответствующих преобразований берут на себя специальные функции растеризации, которые преобразуют математическое представление шрифта для его последующего отображения в растровую матрицу. Эти функции вызываются неявно и не накладывают на разработчика дополнительных временных затрат при разработке.
В Qt класс QFont является основным для работы со шрифтом. Объект этого класса задается целым рядом параметров:
При передаче объекта класса QFont в метод QWidget::setFont() в виджете устанавливается шрифт, который будет использоваться при его отображении. Если требуется установить один шрифт для всего приложения, то объект класса QFont нужно передать в статический метод QApplication::setFont().
Qt содержит дополнительные классы для работы со шрифтами: QFontDatabase, QFontInfo и QFontMetrics.
Рис.1. Характеристики шрифта
Передавая в конструктор класса QFontMetrics объект класса QFont, можно получать его характеристики. Методы leftBearing() и rightBearing() возвращают в пикселах левое и правое пространство буквы соответственно. Метод lineSpacing() возвращает расстояние между базовыми линиями. Передав в метод width(const QString&, int len) строку и количество символов, узнают его ширину; если количество символов не передано, то берется вся длина строки. Чтобы узнать размер всей строки — ее нужно передать в метод width(). Высота возвращается методом height(). Например:
QFontMetrics fm(QFont("Courier", 18, QFont::Bold)); QString str = "String"; qDebug() << "Ширина строки:" << fm.width(str) << "Высота строки:" << fm.height();
Для получения высоты надстрочного и подстрочного элемента шрифта необходимо вызвать методы ascent() и descent() соответственно. Высота надстрочного элемента — это максимальная высота символа над базовой линией шрифта (включая диакритические знаки), а высота подстрочного элемента — это максимальное значение, на которое символ может уходить ниже базовой линией шрифта.
Вызвав метод boundingRect() и передав в него строку, можно получить объект класса QRect, соответствующий прямоугольной области, необходимой для отображения текста строки. Этот метод удобно использовать для определения геометрии текста до начала его отображения.
На следующем шаге рассмотрим отображение строки.