/**
* @brief 将字符串以最大化渲染出贴图覆盖在QLabel上
* @param obj QLabel
* @param text 需要最大化渲染的字符串
* @param align 对齐
* @param color 颜色
*/
void LabelFontMax(QObject* obj, QString text, Qt::AlignmentFlag align, Qt::GlobalColor color)
{
QLabel* label = qobject_cast<QLabel*>(obj);
assert(label != nullptr);
QSize size = label->size();
// 计算字符最大宽度
int maxTextWidth = size.width() - 20;
// 计算字符最大高度
int maxTextHeight = size.height() - 20;
// 计算字符最大宽度和高度
QSize maxTextSize(maxTextWidth, maxTextHeight);
// 计算字符最大宽度和高度下的字体大小
QFont font = label->font();
font.setPointSize(5);
QFontMetrics fm(font);
int fontSize = fm.height();
// 计算字符最大宽度和高度下的字体大小
while (fm.size(Qt::TextSingleLine, text).width() < maxTextWidth && fm.size(Qt::TextSingleLine, text).height() < maxTextHeight) {
fontSize++;
font.setPointSize(fontSize);
fm = QFontMetrics(font);
}
fontSize--;
font.setPointSize(fontSize);
fm = QFontMetrics(font);
// 渲染字符串到pixmap中
QPixmap pixmap(maxTextWidth, maxTextHeight);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
painter.setFont(font);
painter.setPen(color);
painter.drawText(pixmap.rect(), align, text);
// 将pixmap设置为label的背景
label->setPixmap(pixmap);
}
/**
* @brief 将图片以最大化渲染出贴图覆盖在QLabel上
* @param obj QLabel
* @param path 图片路径
*/
void LabelImageMax(QObject* obj, QString path)
{
QLabel* label = qobject_cast<QLabel*>(obj);
int max = qMax(label->width(), label->height());
QImage image;
// 如果是svg文件,先无损等比例放大
if (path.endsWith(".svg")) {
QSvgRenderer svgRender(path);
image = QImage(max, max, QImage::Format_ARGB32);
image.fill(Qt::transparent);
QPainter painter(&image);
svgRender.render(&painter);
} else {
image.load(path);
}
label->setPixmap(QPixmap::fromImage(image.scaled(label->size(), Qt::KeepAspectRatio)));
}
/**
* @brief 将图片以最大化渲染出贴图覆盖在QLabel上
* @param obj QLabel
* @param image 图片
*/
void LabelImageMax(QObject* obj, const QImage& image)
{
QLabel* label = qobject_cast<QLabel*>(obj);
label->setPixmap(QPixmap::fromImage(image).scaled(label->width(), label->height(), Qt::KeepAspectRatio));
}
C++/Qt 在QLabel上最大化渲染文字或图片
最新推荐文章于 2024-04-06 20:15:46 发布