From 6886d70a5d46415173a508773964b82c78f1ded6 Mon Sep 17 00:00:00 2001 From: Spiros Date: Sun, 2 Jun 2024 12:55:23 +0300 Subject: [PATCH] Dynamically resize font --- custombutton.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/custombutton.cpp b/custombutton.cpp index 920d3b2..56eeade 100644 --- a/custombutton.cpp +++ b/custombutton.cpp @@ -1,4 +1,5 @@ #include "custombutton.h" +#include CustomButton::CustomButton(const QString &text1, const QString &text2, const QString &text3, const QColor &lineColor, QWidget *parent) : QPushButton(parent), text1(text1), text2(text2), text3(text3), lineColor(lineColor) { @@ -18,5 +19,27 @@ void CustomButton::paintEvent(QPaintEvent *event) { QRect rect(20, 0, width() - 25, height()); painter.setPen(textColor); - painter.drawText(rect, Qt::AlignVCenter | Qt::AlignLeft, text1 + "\n" + text2 + "\n" + text3); + + QString lines[] = {text1, text2, text3}; + int lineHeight = height() / 3; + + for (int i = 0; i < 3; ++i) { + QFont font = painter.font(); + int fontSize = 1; + painter.setFont(font); + + QFontMetrics fm(font); + QRect textRect = fm.boundingRect(rect, Qt::AlignLeft, lines[i]); + + while (textRect.width() > rect.width() || textRect.height() > lineHeight) { + fontSize--; + font.setPointSize(fontSize); + painter.setFont(font); + fm = QFontMetrics(font); + textRect = fm.boundingRect(rect, Qt::AlignLeft, lines[i]); + } + + int yOffset = lineHeight * i + (lineHeight - textRect.height()) / 3; + painter.drawText(QRect(rect.left(), yOffset, rect.width(), textRect.height()), Qt::AlignLeft, lines[i]); + } }