Для отрисовки текста применяется метод drawText(), который имеет ряд следующих версий:
void drawText(const QPointF &position, const QString &text) void drawText(const QPoint &position, const QString &text) void drawText(int x, int y, const QString &text) void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr) void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr) void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr) void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
Возьмем самую простую версию, которая устанавливает верхней оевый угол прямоугольной области для вывода текста:
class MyWidget : public QWidget { void paintEvent(QPaintEvent *) { QPainter painter(this); painter.drawText(50, 40, "Hello Work!"); } };
По умолчанию QPainter применяет некоторый стандартный шрифт, который нас может не устроить. В этом случае мы можем изменить шрифт. Шрифт представляет объект QFont, для создания которого можно применять ряд конструкторов. Возьмем один из них:
QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false)
Он принимает следующие параметры:
family
: название шрифта
pointSize
: размер шрифта
weight
: вес шрифта
italic
: применяется ли курсив
Для установки шрифта QPainter применяет метод setFont()
, в который передается объект QFont:
class MyWidget : public QWidget { void paintEvent(QPaintEvent *) { QPainter painter(this); QFont verdanaFont("Verdana", 15); painter.setFont(verdanaFont); // переустанавливаем шрифт painter.drawText(50, 40, "Hello Work!"); } };
В данном случае применяется шрифт "Verdana" высотой в 15 точек.
Чтобы не создавать шрифт полностью с нуля, мы можем получить его из QPainter с помощью метода font()
QFont font = painter.font();
А затем переустановить его методом setFont()
. Например, изменим высоту шрифта:
class MyWidget : public QWidget { void paintEvent(QPaintEvent *) { QPainter painter(this); QFont font = painter.font(); // получаем шрифт font.setPixelSize(22); // изменяем высоту шрифта painter.setFont(font); // переустанавливаем шрифт painter.drawText(50, 40, "Hello Work!"); } };
Для настройки шрифта класс QFont предоставляет ряд методов:
setBold(bool enable)
: выделяет текст жирным
setCapitalization(QFont::Capitalization caps)
: устанавливает регистр текста
setFamilies(const QStringList &families)
: устанавливает семейства шрифтов (несколько шрифтов)
setFamily(const QString &family)
: устанавливает семейство шрифтов
setItalic(bool enable)
: устанавливает курсив текста
setLetterSpacing(QFont::SpacingType type, qreal spacing)
: устанавливает отступы между буквами
setOverline(bool enable)
: устанавливает надчеркивание над текстом
setPixelSize(int pixelSize)
: устанавливает высоту шрифта в пикселях
setPointSize(int pointSize)
: устанавливает высоту шрифта в точках
setPointSizeF(qreal pointSize)
: устанавливает высоту шрифта в точках (со значениями с плавающей точкой)
setStretch(int factor)
: устанавливает множитель растягивания шрифта
setStrikeOut(bool enable)
: устанавливает зачеркивание текста
setStyle(QFont::Style style)
: устанавливает стиль шрифта
setUnderline(bool enable)
: устанавливает подчеркивание текста
setWeight(QFont::Weight weight)
: устанавливает вес шрифта
setWordSpacing(qreal spacing)
: устанавливает отступы между словами