Вывод текста с помощью QPainter

Последнее обновление: 14.01.2024

Для отрисовки текста применяется метод 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!");
    }
};
Вывод текста и метод drawText в виджетах Qt

QFont и установка шрифта

По умолчанию 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 точек.

Установка шрифта и вывод текста и метод drawText в виджетах Qt

Чтобы не создавать шрифт полностью с нуля, мы можем получить его из 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!");
    }
};
Настройка шрифта и вывод текста и метод drawText в виджетах Qt

Для настройки шрифта класс 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): устанавливает отступы между словами

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850