参考: 实用QFontMetrics
QLabe 中字符串宽度获取
//每个字符的宽度
QFontMetrics fontMetrics(this->font());
//字符串总宽度
int textWidth = fontMetrics.width(m_text);
templet : QLabel 宽度适应文本宽度,并添加下划线
void ClickedLabel::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QPainter painter(this);
QPen pen;
//获取qlabel字体
QFontMetrics fontMetrics(this->font());
//字符串总宽度
int textWidth = fontMetrics.width(m_text);
//设置label大小
this->setFixedSize(QSize(textWidth, 42));
if (m_isOn) {
pen.setColor(m_color);
painter.setPen(pen);
painter.drawText(rect(), Qt::AlignCenter, m_text);
pen.setWidth(5);
painter.setPen(pen);
painter.drawLine(0, height(), width(), height());
} else {
pen.setColor(labBlack_085);
painter.setPen(pen);
painter.drawText(rect(), Qt::AlignCenter, m_text);
}
}
QString elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0)
如果字符串文本宽度大于宽度,则返回该字符串的省略版本(即,其中包含“…”的字符串)。否则,返回原始字符串。宽度以像素而不是字符为单位指定。
参数2是省略号位置:
Qt::ElideLeft:左
Qt::ElideRight:右
Qt::ElideMiddle:中
Qt::ElideNone:无省略号直接输出原字符。
QFont f;
f.setPixelSize(30);
f.setStretch(QFont::UltraExpanded);
QFontMetrics FontMetric1 = QFontMetrics(f);
qDebug()<<FontMetric1.elidedText("hello world",Qt::ElideLeft,200);
qDebug()<<FontMetric1.elidedText("hello world",Qt::ElideRight,200);
qDebug()<<FontMetric1.elidedText("hello world",Qt::ElideMiddle,200);
qDebug()<<FontMetric1.elidedText("hello world",Qt::ElideNone,200);